问题:如何在不使用“ |”的情况下将两组连接在一起
假定S
和T
被分配了集合。不使用join运算符|
,如何找到两个集合的并集?例如,找到交叉点:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
那么如何在不使用的情况下在一行中找到两个集合的并集|
呢?
回答 0
您可以对集合使用联合方法: set.union(other_set)
请注意,它会返回一个新集合,即不会对其自身进行修改。
回答 1
您可以使用or_
别名:
>>> from operator import or_
>>> from functools import reduce # python3 required
>>> reduce(or_, [{1, 2, 3, 4}, {3, 4, 5, 6}])
set([1, 2, 3, 4, 5, 6])
回答 2
如果您可以修改原始集(在某些情况下可能需要这样做),可以使用set.update()
:
S.update(T)
返回值是None
,但S
将更新为原始S
和的并集T
。
回答 3
假设您也无法使用s.union(t)
,等于s | t
,您可以尝试
>>> from itertools import chain
>>> set(chain(s,t))
set([1, 2, 3, 4, 5, 6])
或者,如果您想理解,
>>> {i for j in (s,t) for i in j}
set([1, 2, 3, 4, 5, 6])
回答 4
如果加入表示您是工会,请尝试以下方法:
set(list(s) + list(t))
这有点骇人听闻,但我想不出更好的衬里来做。
回答 5
假设您有2个清单
A = [1,2,3,4]
B = [3,4,5,6]
所以你可以找到A
联盟B
如下
union = set(A).union(set(B))
另外,如果要查找相交和非相交,请按照以下步骤进行操作
intersection = set(A).intersection(set(B))
non_intersection = union - intersection
回答 6
您可以像这样将两个集合解压缩成一个集合:
>>> set_1 = {1, 2, 3, 4}
>>> set_2 = {3, 4, 5, 6}
>>> union = {*set_1, *set_2}
>>> union
{1, 2, 3, 4, 5, 6}
在*
解包集。拆包是将可迭代项(例如集合或列表)表示为它产生的每个项目的地方。这意味着上面的示例简化为{1, 2, 3, 4, 3, 4, 5, 6}
,然后简化为,{1, 2, 3, 4, 5, 6}
因为该集合只能包含唯一项。
回答 7
您可以做union
或简单的列表理解
[A.add(_) for _ in B]
A将拥有B的所有元素
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。