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:在这里发布我的整个代码,因为显然仅发布该段不会给出错误。
答案 0 :(得分:2)
更改代码行
k=A
至
k = set(A)
创建A的本地副本,并且不更新原始集合A,因为集合是python中的可变对象
https://medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747
答案 1 :(得分:0)
问题来自union
函数。当您编写k = A
时,k
和A
指的是同一集合。因此,当您将元素添加到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'])