2011-01-08 13 views
5

me gustaría volver a escribir esta parte del código utilizando el generador:Crear una lista de potencias cuadradas de números en el rango utilizando el generador

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

¿Cómo puedo hacer esto? Intentado:

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

pero plantea error de sintaxis en x**2 parte.

+0

El código que ha pegado aquí no plantea un error de sintaxis. (No hará lo que espera que haga, agregará un iterador perezoso en lugar de hacer una lista de los elementos que dicho iterador cede) – delnan

Respuesta

15

Usted sería mejor usar lista por comprensión:

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

+1 Y para que quede registrado, esto es (al menos conceptualmente, hay una diferencia de implementación que lo hace más lento) lo mismo que 'lista (x * x para x en el rango (11))'. – delnan

8

Se equivoca; su código no produce un error de sintaxis, sólo hace las cosas mal:

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

Si tiene que usar un generador:

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

Es más sencillo utilizar una lista por comprensión:

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

o

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

Pero eso realmente no responde la pregunta, ¿verdad? – delnan

+0

¿por qué? es su parte de código escrita usando el generador – virhilo

+0

OP no tiene problemas para escribir un generador; él tiene un problema al armar la lista. – SilentGhost

1

Utilice extend no append.

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

Mejor aún:

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