python`in`关键字作为过滤器中使用的函数

时间:2011-07-20 17:54:10

标签: python keyword

是否可以在过滤器中使用python关键字in?我知道二进制,一元,赋值操作等同于函数调用。

,例如

''!=3

相同
''.__ne__(3)

in函数有类似之处吗? 我想做这样的事情。 ..

filter( list1.__in__, list2 )

我想这可以通过编写in函数来完成...但我只是想知道它是否已经内置。

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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]

答案 2 :(得分:4)

一般情况下,您应该使用operator模块中的函数,在这种情况下它将是operator.contains

但是通过使用集合可以更有效地实现此目的:

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]

注意:&运算符是交集。

答案 3 :(得分:2)

列表理解,如Dan D.的答案,绝对是最好的方法。但是,在更一般的情况下,如果要在另一个函数作为参数的函数中使用innot之类的东西,可以使用lambda函数:

>>> list1 = [2, 4, 6, 8, 10]
>>> list2 = [1, 2, 3, 4, 5]
>>> in_check = lambda item: item in list1
>>> filter(in_check, list2)
[2, 4]

同样,我只是为了你的一般知识而提出这个问题;处理这个特定案例的最佳方法绝对是列表理解,如Dan D.的答案。有关Python中lambda的更多信息,请访问here