2011-01-08 20 views
5

Chciałbym przepisać tę część kodu przy użyciu generatora:Stwórz listę kwadratowych potęg liczb w zakresie wykorzystaniem generatora

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

Jak mogę to zrobić? Wypróbowałem:

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

, ale powoduje to zwiększenie błędu składni w części x**2.

+0

Kod wklejony tutaj nie podnieść błąd składni. (Nie zrobi tego, czego się spodziewasz, ale doda leniwy iterator zamiast tworzyć listę z elementów, które daje iterator) – delnan

Odpowiedz

15

Byłbyś lepiej wyłączyć za pomocą listy ze zrozumieniem:

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

+1 I dla przypomnienia, to jest (przynajmniej konceptualnie, istnieje różnica implementacji, która sprawia, że ​​jest wolniejsza) tak samo jak "lista (x * x dla x w zakresie (11))". – delnan

8

Jesteś w błędzie; Twój kod nie daje błąd składni, to po prostu robi coś złego:

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

Jeśli trzeba użyć generatora:

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

prościej użyć wyrażeń listowych:

>>> 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> 

lub

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

Ale to tak naprawdę nie odpowiada na pytanie, prawda? – delnan

+0

dlaczego? to jego część kodu napisana przy użyciu generatora – virhilo

+0

OP nie ma problemu z pisaniem generatora; ma problem ze złożeniem listy. – SilentGhost

1

Użyj extend nie append.

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

Jeszcze lepiej:

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