2013-02-08 64 views
0

我對Python比較陌生,我只是試圖去掌握一些常用功能。使用生成器創建列表時Python SyntaxError

我試着寫一個簡單的腳本來獲得0和100這就是我想出了數字之間的所有整數的平方根:

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

我有一個SyntaxError當我跑了,並且據我所知,它不喜歡「n * n」的位。我是否正確地推斷這是不可能的?有沒有辦法實現這一點,或者我需要一個sqrt()函數?

感謝

回答

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班輪:

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

我想盡可能多。我不認爲我完全理解列表理解是怎麼回事,這就是我的問題來自何處。模仿類似C(i = 0; i * i Richard 2013-02-08 16:23:14

+0

@Richard - 這個循環與'xrange(int(math.sqrt(n)))中的i相同:'我相信 - 或者你可以把它變成'while循環。問題是,在python中,迭代的對象是在循環的開始處設置的,而如果你真的想到它,'C' for循環更像是'while'語句。 – mgilson 2013-02-08 16:25:49

+0

我仍然有一個問題,就是我只想要數字0-10,而不是列表[0,1,1.414,...,10]。有任何想法嗎? – Richard 2013-02-08 16:42:33

1

列表理解的語法不正確。你可以寫類似:

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

謝謝。庫的導入很重要! – Richard 2013-02-08 16:23:43

0

你還可以嘗試:

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