2013-06-28 61 views
2
>>> numbers = [34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7] 
>>> newlist = [] 
>>> newlist = [newlist.append(number) for number in numbers if number > 0] 
>>> newlist 
[None, None, None, None, None] 

newlist列表變量應該包含從上面的列表所有的正值。我似乎沒有得到正確的答案。任何人都可以指出上述代碼中的錯誤嗎?我剛剛開始學習python。我正在使用python 3.0。列表綜合編程

回答

3

您需要做的僅僅

newlist = [number for number in numbers if number > 0] 

,讓你的價值觀在newlist

你得到[None, None, None, None, None]是因爲,中newlist.append(number)返回類型爲None,其被追加到的原因列表理解,同時遍歷各個元素。

演示:

>>> a = [] 
>>> x = a.append(1) 
>>> print x 
None 
>>> 

所以,解決方法是:

>>> numbers = [34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7] 
>>> newlist = [number for number in numbers if number > 0] 
>>> newlist 
[34.6, 44.9, 68.3, 44.6, 12.7] 
>>> 
+0

這是有效的。我不知道這個append返回None。謝謝。 – AnandJ

+0

很高興幫助。 Python解釋器是嘗試事情的好地方。文檔中的一些概念可能不是很明顯。 – karthikr

+0

的確如此。一些概念非常簡單,但它在文檔中的表現方式並不是很理解。 – AnandJ

1

list.append()返回None,所以您得到的輸出是預期的。以下是您如何在您的案例中完成列表理解。

newlist = [i for i in numbers if i > 0] 
+0

它與這種變化。謝謝你的幫助。 – AnandJ