2013-07-19 71 views
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 

我已經試過幾件事情,但似乎無法存儲「結果」在列表中供進一步使用。有沒有人知道我應該嘗試什麼?

+1

請注意,您在這裏創建的列表也可以直接定義爲'[1 x x/n for x in xrange(n * n)]''。 –

回答

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

+0

感謝您的快速回復。我必須看看產量... – aaaa

0

你可以利用itertools這裏返回一個可迭代的你,無論是環比的是,或顯式轉換爲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)) 
+0

需要是'xrange(1,n + 1)' – dansalmo

+0

似乎比其他方法快兩倍。 – dansalmo

0

這裏是一個生成器表達式例如:

list(j+1 for i in xrange(n) for j in [i]*n) 
+0

有一種更好的表達方式(沒有兩個循環);看到我對這個問題的評論。 –

+0

是的,我注意到它,發現它很有趣。 – dansalmo

相關問題