在filter中使用python的`in`关键字作为函数

10 投票
4 回答
2310 浏览
提问于 2025-04-16 21:56

在过滤器中使用Python的关键字in是否可能?我知道二元运算、一元运算和赋值操作都可以看作是函数调用。

比如说

''!=3

这和下面的代码是一样的

''.__ne__(3)

那么in这个功能有没有类似的东西呢?我想做的事情是这样的……

filter( list1.__in__, list2 )

我想这可以通过自己写一个in函数来实现……但我只是想知道这个功能是否已经内置了。

4 个回答

4

一般来说,你应该使用operator模块里的函数,在这个情况下可以用operator.contains

不过,有一种更高效的方法可以做到这一点,那就是使用集合(sets):

In [1]: list1 = [2, 4, 6, 8, 10]

In [2]: list2 = [1, 2, 3, 4, 5]

In [3]: list(set(list1) & set(list2))
Out[3]: [2, 4]

注意:&这个符号表示交集。

8

你需要了解一下__contains__这个东西。

>>> [1, 2, 3].__contains__(2)
True
>>> [1, 2, 3].__contains__(4)
False

至于你想要做的事情:

>>> list1 = [2, 4, 6, 8, 10]
>>> filter(list1.__contains__, [1, 2, 3, 4, 5])
[2, 4]
15
filter( list1.__contains__, list2 )

可以更简洁地写成:

[ v for v in list2 if v in list1 ]

并且为了展示它们是等价的:

>>> list1 = [2, 4, 6, 8, 10]
>>> list2 = [1, 2, 3, 4, 5]
>>> [ v for v in list2 if v in list1 ]
[2, 4]

撰写回答