列表理解没有' for'

时间:2017-09-29 15:38:32

标签: python list-comprehension

通常在使用Python中的列表时,我最终只想从列表中过滤掉项目。

numbers = [5, 1, 4, 2, 7, 4]
big_nums = [num for num in numbers if num > 2]

对我而言,这似乎不必要地冗长。我必须在两个单独的语句(num for num ...)中定义和使用num,即使我不对num执行任何操作。

我尝试[num in numbers if num > 2],但是python会抛出一个SyntaxError

在Python中有更简洁的方法吗?

编辑:

我的问题是,是否有更好的方法来完成我在Python中尝试做的事情。很多时候,我不知道Python中的构造,但是这使我的代码更好,更易读。

我不是在询问filter和列表理解之间的性能权衡。我对列表理解没有任何问题,但在学习列表理解之前,我也没有使用标准for循环构建列表的问题。

1 个答案:

答案 0 :(得分:8)

嗯,您可以使用filter,它速度较慢且不易读,但您不需要for

list(filter(lambda x: x > 2, numbers))

或:

list(filter((2).__lt__, numbers))

然而,使用这样的魔术方法是脆弱的,只有当列表只包含整数时才会有效。正如Chris_Rands指出的那样,您通常使用operator.lt代替:

from functools import partial
from operator import lt
list(filter(partial(lt, 2), numbers))

如果列表包含除int以外的其他数字类型,那也可以。