在filter中使用python的`in`关键字作为函数
在过滤器中使用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]