通常在使用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
循环构建列表的问题。
答案 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
以外的其他数字类型,那也可以。