2012-01-01 12 views
10

通常、リスト内包表記は、既存のリストから新しいリストを派生させるために使用されます。例:リスト内包表記の適切な使用 - python

>>> a = [1, 2, 3, 4, 5] 
>>> [i for i in a if i > 2] 
[3, 4, 5] 

他の手順を実行する必要がありますか?例:

>>> a = [1, 2, 3, 4, 5] 
>>> b = [] 
>>> [b.append(i) for i in a] 
[None, None, None, None, None] 
>>> print b 
[1, 2, 3, 4, 5] 

または私は上記を回避し、あなたがそれを行うには、最も理にかなって与える例で

for i in a: 
    b.append(i) 

答えて

10

あなたは確かに内包表記を設定し、辞書内包とともに(リストの内包表記を使用しないでくださいおよびジェネレータの式)を使用します。彼らが偽のリストを蓄積してメモリを浪費するという事実とは別に、それはまた混乱します。私はリストの理解が(意味のある)価値を生み出すことを期待しており、多くは同意するだろう。一方、ループは明らかに一連のステートメントです。彼らは副作用を引き起こし、結果価値を生み出すことは予想されています - 驚きはありません。 Pythonドキュメントから

2

?:代わりに以下を使用する必要があります。

b = [i for i in a] 

何らかの理由でbを作成したい場合は一般に、採用されなければならないいくつかの常識がある。理解力を使用してコードを読むことができない場合は、コードを使用しないでください。そうでなければそれに行く。

+1

'B = [:]'また、私はあなたが(実際にはむしろ悪い)例にあまりを集中していると信じて –

2

作成したリストを使用する場合は、リスト内包表記のみを使用してください。それ以外の場合は、GCを使用しないでもう一度それをスローするだけで作成します。

ので、代わりの[b.append(i) for i in a]あなたはループのための適切なを使用する必要があります:あなたが追加したい場合は、しかし、

b += (i for i in a) 

for i in a: 
    b.append(i) 

別の解決策は、発電機の発現を介してになります全体のリストは、簡単に行うことができます

b += a 

そして、あなただけのリストに追加する前の要素に関数を適用する必要がある場合、あなたは常にmapを使用することができます。

b += map(somefunc, a) 
+0

...働くだろう。 – delnan

+0

よくある質問は、最初に答えています。この例の内容は、代替案に関するユーザーにいくつかのアイデアを伝えることです。 – ThiefMaster

0
b = [] 
a = [1, 2, 3, 4, 5] 
b.extend (a) 
関連する問題