如何进行这样的列表更改?

时间:2012-08-06 20:16:22

标签: python

我需要一个以列表a=[1]开头的python程序,然后将其更改为2然后3 ...然后5然后添加另一个元素和列表变为1,1然后变为1,2等,直到变为5,5并添加另一个元素并变为1,1,1并继续前进,直到它有11个元素等于5,因此它以5,5,5,5,5,5,5,5,5,5,5

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您可以将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

这不会创建在每次迭代中更改的单个列表,而是为每次迭代创建一个新元组。

答案 2 :(得分:2)

因为这看起来像是一个家庭作业问题,所以你只会得到一个让你走上正确轨道的答案。

在我看来,您需要以下行为:

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

所以看起来你正在向前添加元素,然后向后递增它们。

我会查找模运算,看看如何向后递增将列表清回1。

一旦你这样做,考虑(x mod 4)+ 1的范围。

答案 3 :(得分:0)

这是一个可以在其进程的任何状态下接收此列表并知道如何处理它的函数。对不起,答案很长,我想提供尽可能多的帮助。我知道代码不是最好的。

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]