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函数会得出一个4,而这显然不在集合A中!
编辑:在这里发布我的整个代码,因为显然只发布片段不会给出错误。
发布于 2018-12-05 04:23:43
将代码行k=A
更改为k = set(A)
,以创建A的本地副本,并且不更新原始集合A,因为集合是python中的可变对象
一本好书https://medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747
发布于 2018-12-05 04:24:22
问题来自union
函数。当您编写k = A
时,k
和A
引用相同的集合。因此,当您向k
添加元素时,它们也会被添加到A
中。那么在调用intersection(A,B)
时A
就不一样了
编写k = A.copy()
来创建单独的对象,而不是k = A
。
发布于 2018-12-05 04:23:37
使用内置的集合函数可以很容易地实现A和B的交集。
>>> A = [1,2,3,'foo','bar']
>>> B = [2,4,'stack','overflow','foo']
>>> set(A) & set(B)
set([2, 'foo'])
https://stackoverflow.com/questions/53620457
复制相似问题