__contains__函数的多个参数

时间:2011-04-25 08:20:45

标签: python contains

是否可以在列表中传递多个参数的“__ contains __”函数?我想检查至少我列表中的一个项目是否存在于不同的列表中。

例如: [0,1,4,8,87,6,4,7,5, 'A', 'F', 'ER', 'FA', 'VZ']

我想检查其中一个项目(8,5,'f')是否在该列表中。

我该怎么做?

3 个答案:

答案 0 :(得分:7)

AFAIK,__contains__只接受一个参数,无法更改。

但是,您可以执行以下操作以获得所需的结果:

>>> a = [0,1,4,8,87,6,4,7,5,'a','f','er','fa','vz']
>>> any(map(lambda x: x in a, (8,5,'f')))
True

>>> from functools import partial
>>> from operator import contains
>>> f = partial(contains, a)
>>> any(map(f, (2,3)))
False

答案 1 :(得分:3)

使用内置的 set 类型。

>>> l =  [0,1,4,8,87,6,4,7,5,'a','f','er','fa','vz']
>>> s = (8,5,'f')
>>> bool(set(s) & set(l))
True

Set方法也会将iterables作为参数,避免创建set。

最简明:

2.6提供了 set.isdisjoint(其他),它可能会在找到公共元素后立即返回。

>>> not set(l).isdisjoint(s)
True

如果你想循环:

>>> any((val in s) for val in l)
True

答案 2 :(得分:2)

您可以使用套装:

list1 = [0,1,4,8,87,6,4,7,5,'a','f','er','fa','vz']
tuple1 = (8,5,'f')

def my_contains(first, second):
    return bool(set(first).intersection(second))

my_contains(list1, tuple1) # True
my_contains(list1, [1]) # True
my_contains(list1, (125,178,999)) # False