Python交集输出

时间:2018-12-04 19:52:59

标签: python

def union(A,B):
    k = A
    for i in B:
        k.add(i)
    return k
def intersection(A,B):
    k = set()
    for i in A:
        if i in B:
            k.add(i)
            print(k)
    return k
A = {1,2,3}
B = {1,2,4}
assert( union(A,B)== {1,2,3,4} )
assert( intersection(A,B) == {1,2} )

所以我只是想做一个简单的交集函数。我认为,如果确实需要,可以使它以其他方式起作用,但是我担心我缺少一些重要的东西,因此我认为我应该在这里要求更好地了解正在发生的事情。

我很清楚这两个集合的交集应该为{1,2},但是由于某种原因,当“ in” A迭代的for函数显然不在集合A中时,它会拉出4!

edit:在这里发布我的整个代码,因为显然仅发布该段不会给出错误。

3 个答案:

答案 0 :(得分:2)

更改代码行 k=Ak = set(A)创建A的本地副本,并且不更新原始集合A,因为集合是python中的可变对象

https://medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747

答案 1 :(得分:0)

问题来自union函数。当您编写k = A时,kA指的是同一集合。因此,当您将元素添加到k时,它们将被添加到A。然后,A在调用intersection(A,B)

时不一样

编写k = A而不是k = A.copy()来创建一个单独的对象。

答案 2 :(得分:-1)

使用内置的设置函数可以轻松实现A和B的交集。

>>> A = [1,2,3,'foo','bar']
>>> B = [2,4,'stack','overflow','foo']
>>> set(A) & set(B)
set([2, 'foo'])