Python 使用生成器创建范围内数字的平方幂列表
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4636656/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Create list of square powers of numbers in range using generator
提问by marks34
I'd like to rewrite this part of code using generator :
我想使用 generator 重写这部分代码:
basic = []
for x in range(0,11):
basic.append(x**2)
How can I do this ? Tried :
我怎样才能做到这一点 ?试过:
basic.append(x**2 for x in range(0,11))
but it raises syntax error in x**2part.
但它x**2部分引发了语法错误。
采纳答案by SilentGhost
You'd be better off using list comprehension:
你最好使用列表理解:
basic = [x*x for x in range(11)]
回答by John Machin
You are mistaken; your code doesn't produce 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 simpler 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]
>>>
回答by virhilo
>>> (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>
>>>
回答by Mark Tolonen
Use extendnot append.
使用extend不append。
>>> basic=[]
>>> basic.extend(x**2 for x in range(11))
>>> basic
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Better yet:
更好的是:
>>> basic = [x**2 for x in range(11)]
>>> basic
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

