Создать список квадратов степеней чисел в диапазоне, используя генератор - PullRequest
5 голосов
/ 09 января 2011

Я хотел бы переписать эту часть кода с помощью генератора:

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

Как я могу это сделать? Пробовал:

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

но это вызывает синтаксическую ошибку в x**2 части.

Ответы [ 4 ]

16 голосов
/ 09 января 2011

Вам было бы лучше, если бы вы понимали список:

basic = [x*x for x in range(11)]
8 голосов
/ 09 января 2011

Вы ошибаетесь; ваш код не генерирует синтаксическую ошибку, он просто делает неправильную вещь:

>>> 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]
>>>
1 голос
/ 09 января 2011

Используйте 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]
0 голосов
/ 09 января 2011
>>> (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>
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...