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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 16:39:32  来源:igfitidea点击:

Create list of square powers of numbers in range using generator

pythonrangegenerator

提问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.

使用extendappend

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