2011-01-08 2 views
5

Я хотел бы переписать эту часть кода с использованием генератора:Создать список квадратных степеней чисел в диапазоне, используя генератор

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

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

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

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

+0

код вставили здесь не вызывает синтаксическую ошибку. (Он не будет делать то, что вы ожидаете от него, хотя он добавит ленивый итератор вместо того, чтобы составить список из элементов, на которые ушел указанный итератор) – delnan

ответ

15

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

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

+1 И для записи это (по крайней мере, концептуально, есть разница в реализации, которая делает это медленнее) то же, что и «list (x * x для x в диапазоне (11))». – delnan

8

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

>>> 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] 
>>> 
0
>>> (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

Но это на самом деле не отвечает на вопрос, верно? – delnan

+0

Почему? это его часть кода, написанная с помощью генератора – virhilo

+0

OP не имеет проблемы с записью генератора; у него проблемы с сборкой списка. – SilentGhost

1

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] 
Смежные вопросы