使用生成器创建列表时的Python语法错误

时间:2013-02-08 16:06:31

标签: python

我对Python比较陌生,我只是试图掌握一些常见的功能。

我试着编写一个简单的脚本来获取0到100之间所有数字的平方根。这就是我想出的:

mylist = [n for n*n in xrange(0,101)]

当我运行它时,我得到了一个SyntaxError,据我所知,它并不喜欢“n for n * n in”位。我是否正确地推断这是不可能的?有没有办法实现这一点,还是我需要一个sqrt()函数?

由于

3 个答案:

答案 0 :(得分:3)

你需要math.sqrt这样的东西。

mylist = [math.sqrt(n) for n in xrange(0,101)]

Python不够聪明,无法看到n*n = something并推断出n = math.sqrt(something)。这也是一件好事 - 谁能说它不应该是n = -math.sqrt(something)

或者,您可以尝试内置map

mylist = map(math.sqrt,xrange(0,101))

虽然现在大多数人更喜欢列表理解。

有时,这些东西可以在生成器表达式中重写一点:

def square_less_than(n):
    i = 0
    while True:
       if i*i < n:
          yield i
          i += 1
       else:
          break

print list(square_less_than(10))

或者,使用标准库中优秀的itertools模块的等效1-liner:

import itertools
print list(itertools.takewhile(lambda i:i*i < 10,itertools.count()))

答案 1 :(得分:1)

列表推导的语法不正确。你可以这样写:

import math
mylist = [math.sqrt(n) for n in xrange(0, 101)]

答案 2 :(得分:0)

您也可以尝试:

mylist = [n*n for n in xrange(0,101)]