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。

4

2 回答 2

3

你只需要做

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

它为您提供了newlist

您得到的原因[None, None, None, None, None]是,返回类型newlist.append(number)isNone在遍历单个元素时被附加到列表推导中。

演示:

>>> 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]
>>> 
于 2013-06-28T01:52:14.743 回答
1

list.append()返回 a None,因此您得到的输出是预期的。以下是在您的案例中如何进行列表理解的方法。

newlist = [i for i in numbers if i > 0]
于 2013-06-28T01:51:59.320 回答