如何将函数的结果存储在列表中?

时间:2013-07-19 17:12:21

标签: list python-2.7

我有以下功能:

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

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

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)