2013-06-28 4 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 3.0.Список Постижение в Python Программирование

ответ

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