Cree una lista de potencias cuadradas de números en el rango usando el generador

Me gustaría reescribir esta parte del código usando el generador:

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

Cómo puedo hacer esto ? Intentó :

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

pero genera un error de sintaxis en x**2 parte.

preguntado el 08 de enero de 11 a las 23:01

El código que pegó aquí no genera un error de sintaxis. (Sin embargo, no hará lo que espera que haga, agregará un iterador perezoso en lugar de hacer una lista de los elementos que produce dicho iterador) -

4 Respuestas

Sería mejor usar la comprensión de listas:

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

Respondido el 09 de enero de 11 a las 02:01

+1 Y para que conste, esto es (al menos conceptualmente, hay una diferencia de implementación que hace que esta sea más lenta) lo mismo que list(x*x for x in range(11)). - usuario395760

Estás equivocado; su código no produce un error de sintaxis, simplemente hace lo incorrecto:

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

Si debe 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 de comprensión:

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

Respondido el 09 de enero de 11 a las 02:01

Utilización de extend no es append.

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

Mejor todavía:

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

Respondido el 09 de enero de 11 a las 02:01

>>> (x**2 for x in xrange(0,11))
<generator object <genexpr> at 0xb7387734>

or

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

Respondido el 09 de enero de 11 a las 02:01

OP no tiene problemas para escribir un generador; tiene problemas para armar la lista. - SilentGhost

@SilentGhost, ¿seguro? porque ¿cuál es el sentido de hacer una lista desde el generador en el mismo lugar? :) - virhilo

Sí, no tiene mucho sentido. Eso es porque se confundió con los generadores (expresiones) cuando trató de condensar la generación de una lista en una sola expresión. - usuario395760

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.