首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python交叉点输出

Python交叉点输出
EN

Stack Overflow用户
提问于 2018-12-05 03:52:59
回答 3查看 97关注 0票数 -2
代码语言:javascript
复制
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中!

编辑:在这里发布我的整个代码,因为显然只发布片段不会给出错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2018-12-05 04:24:22

问题来自union函数。当您编写k = A时,kA引用相同的集合。因此,当您向k添加元素时,它们也会被添加到A中。那么在调用intersection(A,B)A就不一样了

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

票数 0
EN

Stack Overflow用户

发布于 2018-12-05 04:23:37

使用内置的集合函数可以很容易地实现A和B的交集。

代码语言:javascript
复制
>>> A = [1,2,3,'foo','bar']
>>> B = [2,4,'stack','overflow','foo']
>>> set(A) & set(B)
set([2, 'foo'])
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53620457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档