Bazı ev ödevlerimi yapmak için bazı hızlı ve kirli komut dosyaları üzerinde çalışıyorum ve bunlardan biri, tüm öğelerin toplamı olarak sabit uzunluktaki listeler aracılığıyla yineliyor belirli bir sabit. Her biri için, bazı ek kriterleri karşılayıp karşılamadıklarını kontrol edip başka bir listeye yapıştırıyorum.Belirli bir sayıya verilen bir sayı dizisi oluşturma
Ben toplamı kriterlerini karşılamak için bir yolunu ancak korkunç görünüyor ve burada öğretilebilir an bir çeşit var eminim:
# 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
'[itertools.product içinde vals için vals (aralık (8), tekrar = 11) ise toplamı (vals) == 8] 'daha güzel ancak çözelti daha ** çok ** yavaş olur. – eumiro
+1 - Tekrarlayan kimya ödevlerinizi otomatikleştirmek için bir bilgisayar kullanma aksesuarı. –
Benim içgörüm şu: 8 toplamı olan 11 tamsayıların bir listesi için, sayıların bir LOT sıfır olacak. Bunu yapmanın hızlı bir yolu, tam sayı toplamları 8 ile karşılaştırmaktır - örneğin 8, 1 + 7, 2 + 6, 3 + 5, 4 + 4, 1 + 1 + 6, 1 + 2 + 5 ... 've sonra sadece uygun sayıda sıfır olanlara izin verin. –