我对Python比较陌生,我只是试图掌握一些常见的功能。
我试着编写一个简单的脚本来获取0到100之间所有数字的平方根。这就是我想出的:
mylist = [n for n*n in xrange(0,101)]
当我运行它时,我得到了一个SyntaxError,据我所知,它并不喜欢“n for n * n in”位。我是否正确地推断这是不可能的?有没有办法实现这一点,还是我需要一个sqrt()函数?
由于
答案 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)]