0

我有以下功能:

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

我已经尝试了几件事,但似乎无法将“结果”存储在列表中以供进一步使用。有谁知道我应该尝试什么?

4

3 回答 3

1

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))打印它。

于 2013-07-19T17:14:14.940 回答
0

您可以利用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))
于 2013-07-19T17:22:21.517 回答
0

这是一个生成器表达式示例:

list(j+1 for i in xrange(n) for j in [i]*n)
于 2013-07-19T18:30:15.760 回答