2011-01-11 11 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

+4

Pythonのリファレンスセマンティクスを理解してから、これを自明でないものに使用する前に確認してください。 lに付け加えられたxはすべて同じxなので、そのうちの1つを変更すると、それらのすべてに影響を与えます(それらのすべてが100回と呼ばれます)。 –

+0

説明のために:私は整数のために使用していますので、私の使い方は安全です。 – Toji

答えて

59

でこれを行うことができます:参照することによって保存され、サブリストのように(後で修正することを望むかもしれない値の場合

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

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

、またはdicts):

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

(第1の方法が定数値のための良い考えである理由、lik文字列は<list>*<number>のシンタックスを使用すると浅いコピーしかないので、[{}]*100のようなものを作成した場合は、同じ辞書への参照が100になります。そのうち1つを変更するとすべてが変更されます。 intと文字列は不変なので、これは問題ではありません)。

既存のリストに追加する場合は、上記の手法で追加するもの):

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

@smihael er、そうですか? http://ideone.com/SffARE – Amber

+0

または両方の提案を 'a.extend(b * n)'の形式に組み合わせてください。ここで 'n'はbの要素を繰り返す時間です – DarkCygnus

3

あなたは不変のデータ型についてはリスト内包

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

リストの理解を最後に追加するには、extendを使用します。

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) 
関連する問題