我需要一个 python 程序,它以列表开头,a=[1]
然后将其更改为2
then 3
...5
然后添加另一个元素,列表变为1,1
then1,2
等,直到它变为5,5
并添加另一个元素,然后变为1,1,1
并继续,直到它有 11 个元素等于 5 所以它以5,5,5,5,5,5,5,5,5,5,5
问问题
130 次
4 回答
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
于 2012-08-06T20:20:41.553 回答
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
这不会创建在每次迭代中更改的单个列表,而是为每次迭代创建一个新元组。
于 2012-08-06T20:20:58.077 回答
2
由于这似乎是一个家庭作业问题,你只会得到一个让你走上正轨的答案。
在我看来,您想要以下行为:
[1]
[2]
[3]
[4]
[5]
[1,1]
[1,2]
[1,3]
[1,4]
[1,5]
[2,5]
所以看起来你是在向前添加元素,然后向后增加它们。
我会查找模块化算术,看看如何使递增向后将列表清回 1。
一旦你这样做了,考虑 (x mod 4) + 1 的范围。
于 2012-08-06T20:22:32.147 回答
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]
于 2012-08-06T21:05:56.743 回答