相当于Ruby的.select的Python


问题内容

我有一个列表/数组,让我们叫它x,我想创建一个新的列表/数组,让我们zx符合特定条件的元素中调用这个。

在Ruby中,您可以通过在列表/数组上调用.select方法来做到这一点,如下所示:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
z = x.select{|a| a < 5}

之后,z将如下所示:

z = [1, 2, 3, 4]

Python中是否有可以用来获得相同效果的函数/方法?

如果没有,我能做的最干净的方法是什么?


问题答案:

Python具有内置filter功能:

lst = [1, 2, 3, 4, 5, 6]
filtered = filter(lambda x: x < 5, lst)

但是列表理解可能会更好,尤其是与地图操作结合使用时:

mapped_and_filtered = [x*2 for x in lst if x < 5]
# compare to:
mapped_and_filtered = map(lambda y: y*2, filter(lambda x: x < 5, lst))