我对 Python 比较陌生,我只是想掌握一些常见的特性。
我尝试编写一个简单的脚本来获取 0 到 100 之间数字的所有整数平方根。这就是我想出的:
mylist = [n for n*n in xrange(0,101)]
我在运行它时遇到了 SyntaxError,据我所知,它不喜欢“n for n*n in”位。我推断这是不可能的吗?有没有办法实现这一点,还是我需要一个 sqrt() 函数?
谢谢
我对 Python 比较陌生,我只是想掌握一些常见的特性。
我尝试编写一个简单的脚本来获取 0 到 100 之间数字的所有整数平方根。这就是我想出的:
mylist = [n for n*n in xrange(0,101)]
我在运行它时遇到了 SyntaxError,据我所知,它不喜欢“n for n*n in”位。我推断这是不可能的吗?有没有办法实现这一点,还是我需要一个 sqrt() 函数?
谢谢
你需要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()))
您的列表理解的语法不正确。您可以编写如下内容:
import math
mylist = [math.sqrt(n) for n in xrange(0, 101)]
您也可以尝试:
mylist = [n*n for n in xrange(0,101)]