0

我对 Python 比较陌生,我只是想掌握一些常见的特性。

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

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

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

谢谢

4

3 回答 3

4

你需要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()))
于 2013-02-08T16:07:32.633 回答
1

您的列表理解的语法不正确。您可以编写如下内容:

import math
mylist = [math.sqrt(n) for n in xrange(0, 101)]
于 2013-02-08T16:08:23.067 回答
1

您也可以尝试:

mylist = [n*n for n in xrange(0,101)]
于 2013-02-08T16:43:19.003 回答