2011-01-11 66 views
40

這看起來像Python將有一個快捷方式。我想一個項目追加到列表N次,有效地這樣做:Python:追加項目N次

l = [] 
x = 0 
for i in range(100): 
    l.append(x) 

這似乎對我來說,應該有對於「優化」方法,是這樣的:

l.append_multiple(x, 100) 

在那兒?

+3

結束了`l.extend([x] * 100)`因爲它最適合我的情況。琥珀獲得最全面的答案。謝謝! – Toji 2011-01-11 05:27:50

+4

確保您理解Python的引用語義,然後才能將其用於任何非平凡的事情。附加到l的x都是相同的x,所以它們中的一個影響它們全部(全部都是100次)。 – 2011-01-11 09:35:38

回答

59

對於不可改變的數據類型做到這一點:

l = [0] * 100 
# [0, 0, 0, 0, 0, ...] 

l = ['foo'] * 100 
# ['foo', 'foo', 'foo', 'foo', ...] 

對於值由基準存儲,你不妨再進行修改(如子列表,或者字跡):

l = [{} for x in range(100)] 

(之所以第一種方法只是恆定值的好主意,lik e整數或字符串,是因爲使用<list>*<number>語法時僅使用淺拷貝,因此如果您執行了類似[{}]*100的操作,則最終會有100個對同一字典的引用 - 因此更改其中一個將會將它們全部更改。因爲int和字符串是不可變的,所以這對他們來說不是問題。)

如果要添加到現有列表中,可以使用該列表的extend()方法(結合生成列表通過上述技術添加的東西):

a = [1,2,3] 
b = [4,5,6] 
a.extend(b) 
# a is now [1,2,3,4,5,6] 
3

你可以用一個列表理解

l = [x for i in range(10)]; 
15

使用擴展來添加列表理解到最後。

l.extend([x for i in range(100)]) 

有關更多信息,請參閱Python docs

4

Itertools重複與列表擴展結合使用。

from itertools import repeat 
l = [] 
l.extend(repeat(x, 100)) 
1

我不得不去另一條路線做任務,但這是我結束了。

my_array += ([x] * repeated_times)