2016-04-18 8 views
0

これは私がやりたかったことです:for-expression theappend()アクションジェネレータのリストの理解をするのではなく、私の上記のコードが間違っている理由は、私が何とか理解式のために使用するpythonic方法:.append()アクションをループする

l = ['some existing elements'] 
l.append([0, 0, 0, n]) for n in range(10) 
# this will give error 

、以下を参照:

l = [ [].append([0, 0, 0, n]) for n in range(10) ] 
l 
>>> [None, None, None, None, None, None, None, None, None, None] 
# python is putting the result of expression "[].append([0,0,0,n])" 10 times in 
# a list comprehension, instead of doing appending 10 times 

我々はDoIt_InsteadOfEvalutingIt(l.append([0,0,0,n])) for n in range(10)のようなものを持っている場合、私は疑問に思って?

誰もが時間を無駄にしていますか? for-expressionはリストの理解や生成のためだけですか?

l = ['some existing elements'] 
for n in range(10): 
    l.append([0, 0, 0, n]) 

# or 
# use for expression to create the data, and append the data 
l = ['some existing elements'] 
l.append([[0, 0, 0, n] for n in range(10)]) 
+0

? –

+0

...何ですか? '[0、0、0、n](範囲内のn(10)) ' –

+0

単純な例では違いはありませんが、ループを作成する代わりに" appendまずリストの理解度を計算し、リストの理解度を追加します。 – YunliuStorage

答えて

2

あなたは、明示的なループを使用せずに(発電機/理解の外の発電機/理解for構文を使用することはできません:私は古い学校に行くと、ちょうど(より速く、あまりにもおそらく)やるべきところ、これがあるかもしれ)。しかし、あなたはすることができますあなたが欲しいものを行うために単純なリストの理解を使用してください。

>>> [[0,0,0,n] for n in range(10)] 
[[0, 0, 0, 0], [0, 0, 0, 1], ..., [0, 0, 0, 9]] 

あなたは、既存のリストの最後に、これらすべてを置くextendを使用する必要がある場合:

existing_stuff = [1, 2, 3] 
existing_stuff.extend([[0,0,0,n] for n in range(10)]) 

あなたがループの中で、より複雑な何かをする必要がある場合は、単に使用通常forループ。

for n in range(10): 
    existing_stuff.append([0,0,0,n]) 
    # other stuff 
+0

これは基本的にfor-expressionはリストの解説またはジェネレータのためのものですか? – YunliuStorage

+0

@YunliuStorage明示的なループ( 'nの範囲(10):foo(n)')を行うことができますが、一般的には、 '行末'それが繰り返し実行されることを期待してください。 –

+0

@ Henry Keiter私は、「行の最後に式を叩いて繰り返し実行することを期待しています」と期待していました。 – YunliuStorage

1

2行目に大括弧がありません。あなたがそれをそのように表現したいのであれば、アイデアは機能します。また、appendは、リスト全体を要素としてリストに追加します。

l = [1, 2, 3, 4] 
[l.extend([n, n + 1]) for n in range(5, 11, 2)] 

print l 

出力:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
+0

私が探しているものではない、私は.append()を探しています。しかし、l.extend()はNoneを返しますが、.extend()アクションはlに適用されるように、あなたの方法は面白い速いハックであることに気付きました。 – YunliuStorage

+0

はい、 'extend'または' append'は 'None'を返します。それはその署名だけです。リストを更新したいだけなら、仕事は終わりです。どのように書くかは、コーディングスタイルによって異なります。 – fips

1

終わりにあなたが提案:

l = ['some existing elements'] 
l.append([[0, 0, 0, n] for n in range(10)]) 
ここで必要となる代わりに、元のリスト lにリスト内包からすべての要素を追加します extendです

appendextendに置き換えたいと思うかもしれませんが、これは良いアイデアだと思います(私はguessinですgの長さをlにするには、1ではなく10ずつ増やします。

あなたはそうのような、それを短くすることができます:あなたの予想出力は何

l = ['some existing elements'] + [[0, 0, 0, n] for n in range(10)] 
関連する問題