Create a list of square numbers in a range using a generator

I would like to rewrite this part of the code using a generator:

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

How can i do this? I tried:

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

but it causes a syntax error in part x**2.

+5
source share
4 answers

You will be better off using list comprehension:

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

You're wrong; your code does not generate a syntax error, it just does the wrong thing:

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

If you must use a generator:

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

It’s easier to use a list comprehension:

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

extend not 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]
+1
>>> (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

All Articles