Tôi đã làm việc trên một số tập lệnh nhanh và bẩn để thực hiện một số bài tập về hóa học của mình và một trong số chúng lặp lại trong danh sách có độ dài không đổi một hằng số nhất định. Đối với mỗi người, tôi kiểm tra xem họ có đáp ứng một số tiêu chí bổ sung và đưa chúng vào danh sách khác hay không.Tạo một dãy số tổng cho một số đã cho
tôi đã tìm ra một cách để đáp ứng các tiêu chí tổng hợp, nhưng có vẻ khủng khiếp, và tôi chắc chắn rằng có một số loại của thời điểm này có thể dạy dỗ ở đây:
# iterate through all 11-element lists where the elements sum to 8.
for a in range(8+1):
for b in range(8-a+1):
for c in range(8-a-b+1):
for d in range(8-a-b-c+1):
for e in range(8-a-b-c-d+1):
for f in range(8-a-b-c-d-e+1):
for g in range(8-a-b-c-d-e-f+1):
for h in range(8-a-b-c-d-e-f-g+1):
for i in range(8-a-b-c-d-e-f-g-h+1):
for j in range(8-a-b-c-d-e-f-g-h-i+1):
k = 8-(a+b+c+d+e+f+g+h+i+j)
x = [a,b,c,d,e,f,g,h,i,j,k]
# see if x works for what I want
'[vals for itertools.product (phạm vi (8), repeat = 11) nếu tổng (vals) == 8]' đẹp hơn, nhưng ** nhiều ** chậm hơn giải pháp của bạn. – eumiro
+1 - Đạo cụ sử dụng máy tính để tự động hóa bài tập về nhà hóa học lặp đi lặp lại của bạn. –
Cái nhìn sâu sắc của tôi là: cho một danh sách 11 số nguyên tất cả tổng hợp đến 8, một LOT của các con số sẽ bằng không. Cách nhanh nhất để làm điều này là tìm tất cả các cách tổng hợp các số nguyên thành 8 - ví dụ: '8, 1 + 7, 2 + 6, 3 + 5, 4 + 4, 1 + 1 + 6, 1 + 2 + 5 ... 'và sau đó chỉ cho phép những người có số lượng zeroes thích hợp. –