或布尔函数作为函数参数

时间:2014-05-14 13:39:23

标签: python list boolean boolean-operations

给出

a = [1, 2, 3, 4]
b = [10, 1, 20, 30, 4]

我想检查a中是否存在b中的任何元素。

>>> [i in b for i in a]
Out[45]: [True, False, False, True]

上面的代码完成了部分工作。下一步可能是reduce。 但是,如果没有我自己的or函数实现,我没有得到下面的代码。

def is_any_there(a, b):
    one_by_one = [i in b for i in a]

    def my_or(a,b):
        if a or b:
            return True
        else:
            return False
    return reduce(my_or, one_by_one)

如何避免重写or函数?

2 个答案:

答案 0 :(得分:4)

is_there_any只需重新实现自{2}以来可用的any函数:

any(x in b for x in a)

此外,my_or已在标准库中以operator.or_的形式提供。

答案 1 :(得分:4)

如果项目可以播放,那么您可以使用set.isdisjoint()

>>> a = [1, 2, 3, 4]
>>> b = [10, 1, 20, 30, 4]
>>> not set(a).isdisjoint(b)
True
>>> b = [10, 10, 20, 30, 40]
>>> not set(a).isdisjoint(b)
False