我對Python比較陌生,我只是試圖去掌握一些常用功能。使用生成器創建列表時Python SyntaxError
我試着寫一個簡單的腳本來獲得0和100這就是我想出了數字之間的所有整數的平方根:
mylist = [n for n*n in xrange(0,101)]
我有一個SyntaxError當我跑了,並且據我所知,它不喜歡「n * n」的位。我是否正確地推斷這是不可能的?有沒有辦法實現這一點,或者我需要一個sqrt()函數?
感謝
我對Python比較陌生,我只是試圖去掌握一些常用功能。使用生成器創建列表時Python SyntaxError
我試着寫一個簡單的腳本來獲得0和100這就是我想出了數字之間的所有整數的平方根:
mylist = [n for n*n in xrange(0,101)]
我有一個SyntaxError當我跑了,並且據我所知,它不喜歡「n * n」的位。我是否正確地推斷這是不可能的?有沒有辦法實現這一點,或者我需要一個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班輪:
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)]
謝謝。庫的導入很重要! – Richard 2013-02-08 16:23:43
你還可以嘗試:
mylist = [n*n for n in xrange(0,101)]
我想盡可能多。我不認爲我完全理解列表理解是怎麼回事,這就是我的問題來自何處。模仿類似C(i = 0; i * i
Richard
2013-02-08 16:23:14
@Richard - 這個循環與'xrange(int(math.sqrt(n)))中的i相同:'我相信 - 或者你可以把它變成'while循環。問題是,在python中,迭代的對象是在循環的開始處設置的,而如果你真的想到它,'C' for循環更像是'while'語句。 – mgilson 2013-02-08 16:25:49
我仍然有一個問題,就是我只想要數字0-10,而不是列表[0,1,1.414,...,10]。有任何想法嗎? – Richard 2013-02-08 16:42:33