発電

2011-01-08 2 views
5

を使用して範囲内の数値の平方権限のリストを作成し、私は発電機を使用してコードのこの部分を書き換えるしたいと思います:発電

basic = [] 
for x in range(0,11): 
    basic.append(x**2) 

はどうすればこれを行うことができますか?試しました:

basic.append(x**2 for x in range(0,11)) 

x**2部分に構文エラーが発生しました。

+0

コードは、構文エラーは発生しません。 (反復子が出すアイテムからリストを作成するのではなく、怠惰なイテレータを追加します) – delnan

答えて

15

あなたは、リストの内包表記を使用したほうが良いと思います:

basic = [x*x for x in range(11)] 
+0

+1レコードの場合、これは少なくとも概念的には実装の違いにより、これは 'list(x * x for range(11)in) 'と同じです)。 – delnan

8

あなたは間違っています。あなたは発電機を使用する必要がある場合

>>> basic = [] 
>>> basic.append(x**2 for x in range(0,11)) 
>>> basic 
[<generator object <genexpr> at 0x01E9AD78>] 
>>> 

:あなたのコードは、それだけで間違ったことをして、構文エラーを生成しません

>>> basic = list(x**2 for x in range(0,11)) 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
>>> 

それはリストの内包表記を使用するように簡単です:

>>> basic = [x**2 for x in range(0,11)] 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
>>> 
0
>>> (x**2 for x in xrange(0,11)) 
<generator object <genexpr> at 0xb7387734> 

または

>>> def gen(): 
...  for x in xrange(0,11): 
...    yield x**2 
... 
>>> gen 
<function gen at 0xb738a0d4> 
>>> gen() 
<generator object gen at 0xb7387734> 
>>> 
+0

しかし、それは実際に質問に答えるわけではありません。 – delnan

+0

なぜですか?それはジェネレータを使って書かれたコードの彼の部分です。 – virhilo

+0

OPはジェネレータの作成に問題ありません。彼はリストを組み立てる際に問題があります。 – SilentGhost

1

使用extendではなく、appendです。

いっそ
>>> basic=[] 
>>> basic.extend(x**2 for x in range(11)) 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

:あなたがここに貼り付け

>>> basic = [x**2 for x in range(11)] 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]