我有以下功能:
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
我已经尝试了几件事,但似乎无法将“结果”存储在列表中以供进一步使用。有谁知道我应该尝试什么?
我有以下功能:
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
我已经尝试了几件事,但似乎无法将“结果”存储在列表中以供进一步使用。有谁知道我应该尝试什么?
Print 不会保存结果 - 它只是将它们(一次一个)发送到标准输出 (stdout) 以显示在屏幕上。为了获得结果的有序副本,我谦虚地建议您使用关键字将其转换为生成器函数。yield
例如:
>>> 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))
打印它。
您可以利用itertools
此处为您返回一个可迭代对象,并对其进行循环,或显式转换为 a 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))
这是一个生成器表达式示例:
list(j+1 for i in xrange(n) for j in [i]*n)