如果两组共享数字,则返回布尔值

时间:2015-11-22 21:04:42

标签: python

我想编写一个函数,如果两个集合共享某些数字则返回true,如果不相同则显然为false(显然)。

这是我到目前为止所拥有的:

def contains(set1, set2):

    set1 = [5,2,9,1,3]
    set2 = [3,8,9,1,4]

    set_of_nums1, set_of_nums2 = set(set1), set(set2)

    for i in set1:
        if i in set2:
            return True

        return False

contains (set([5,2,9,1,3]), set([3,8,9,1,4]))

应该有效,但我没有回报。怎么会?

2 个答案:

答案 0 :(得分:4)

这只是你的缩进错了。如果你在set 2中有第一个set1数,你的代码现在只返回True,因为如果i不在set2中,它会在循环的第一次迭代中返回True。只需修复它:

def contains(set1, set2):

    set1 = [5,2,9,1,3]
    set2 = [3,8,9,1,4]

    for i in set1:
        if i in set2:
            return True

    return False

然而,正如评论中所指出的,这不是最实际的方法

但是,没有任何意义,你接受2个输入,然后完全覆盖它们带来的值。您应该声明这样的函数:def contains():并且不接受任何输入,或者您应该删除那些改变set1和set2的值的2行,甚至在使用作为输入传递的值之前。

答案 1 :(得分:4)

用@ built in method检查集合是否至少共享一个项目,如@jonrsharpe在评论中指出的那样:

if set1.intersection(set2):
  # share an element

或使用交叉算子(&

if set1 & set2:
  # share an element