簡體   English   中英

我該如何更改列表?

[英]How do i make a list change like this?

我需要一個以列表a=[1]開頭的python程序,然后將其更改為2然后3 ...然后5再添加另一個元素,列表變為1,1然后變為1,2 ,依此1,2 ,直到它變為5,5並添加另一個元素,然后變為1,1,1並繼續進行,直到它具有等於5的11個元素,從而以5,5,5,5,5,5,5,5,5,5,5

from itertools import chain, product

n = range(1, 6)
for a in chain.from_iterable(product(n, repeat=i) for i in range(1, 12)):
    # do whatever you want to with a

您可以將for循環與itertools.product()一起使用:

from itertools import product

for n in range(1, 12):
    for a in product(range(1, 6), repeat=n):
        # Do whatever you want to do for each of the tuples

這不會創建在每次迭代中都會更改的單個列表,而是會為每次迭代創建一個新的元組。

由於這似乎是一個家庭作業問題,因此您只會得到一個使您走上正確軌道的答案。

在我看來,您想要以下行為:

[1]
[2]
[3]
[4]
[5]
[1,1]
[1,2]
[1,3]
[1,4]
[1,5]
[2,5]

因此,似乎您要向前添加元素,然后向后增加元素。

我將查找模塊化算術,以了解如何使向后遞增將列表清回到1。

完成后,請考慮(x mod 4)+ 1的范圍。

這個函數可以在過程的任何狀態下接收此列表,並知道如何處理它。 很抱歉,我的回答很長,我想提供盡可能多的幫助。 而且我知道代碼不是最好的。

def growth(mylist):
    new = False
    i = 0
    mylist = [r for r in reversed(mylist)]
    while new is False:
        if mylist[i] < 5:
            mylist[i] += 1
            break
        elif i == len(mylist)-1:
            new = True
        else:
            i+=1
        if i >= len(mylist):
            break
    if new == True:
        mylist = [1 for r in xrange(len(mylist)+1)]
    mylist = [r for r in reversed(mylist)]
    return mylist

一些測試:

#get at start:
a = [1]
print a
for i in xrange(10):
    a = growth(a)
    print a

結果:

>>> 
[1]
[2]
[3]
[4]
[5]
[1, 1]
[1, 2]
[1, 3]
[1, 4]
[1, 5]
[2, 5]

print    
#get in middle:
a = [1,3]
print a
for i in xrange(10):
    a = growth(a)
    print a

結果:

>>>
[1, 3]
[1, 4]
[1, 5]
[2, 5]
[3, 5]
[4, 5]
[5, 5]
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 1, 4]

最后:

print
#get late:
a = [1,1,3,5]
print a
for i in xrange(10):
    a = growth(a)
    print a

結果:

>>>
[1, 1, 3, 5]
[1, 1, 4, 5]
[1, 1, 5, 5]
[1, 2, 5, 5]
[1, 3, 5, 5]
[1, 4, 5, 5]
[1, 5, 5, 5]
[2, 5, 5, 5]
[3, 5, 5, 5]
[4, 5, 5, 5]
[5, 5, 5, 5]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM