我有以下功能:
def second(n):
z =0
while z < n:
z = z +1
for i in range(n):
print z
输出将是秒(3):
1
1
1
2
2
2
3
3
3
我尝试了几件事,但似乎无法将“结果”存储在列表中以供进一步使用。有谁知道我应该尝试什么?
答案 0 :(得分:1)
打印不保存结果 - 它只是将它们(一次一个)发送到标准输出(标准输出)以在屏幕上显示。为了获得结果的订单副本,我谦卑地建议您使用yield
关键字将其转换为generator function。例如:
>>> def second(n):
... z =0
... while z < n:
... z = z +1
... for i in range(n):
... yield z
...
>>> print list(second(3))
[1, 1, 1, 2, 2, 2, 3, 3, 3]
在上面的代码list()
中,将生成器扩展为可以分配给要保存的变量的结果列表。如果您要保存second(3)
所有结果的列表,您可以选择results = list(second(3))
而不是打印它。
答案 1 :(得分:0)
您可以在此处使用itertools
为您返回一个iterable,并循环显示,或显式转换为list
,例如:
from itertools import chain, repeat
def mysecond(n):
return chain.from_iterable(repeat(i, n) for i in xrange(1, n))
print list(mysecond(3))
答案 2 :(得分:0)
这是一个生成器表达式示例:
list(j+1 for i in xrange(n) for j in [i]*n)