如何在不使用“|”的情况下在一行中连接两个集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用“|”的情况下在一行中连接两个集合相关的知识,希望对你有一定的参考价值。
假设S
和T
被分配集合。不使用连接运算符|
,如何找到两个集合的并集?例如,这可以找到交叉点:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
那么如何在不使用|
的情况下在一行中找到两个集合的并集?
答案
您可以对集合使用union方法:set.union(other_set)
请注意,它返回一个新集,即它不会自行修改。
另一答案
对不起,为什么我们不能再次使用join运算符?
>>> set([1,2,3]) | set([4,5,6])
set([1, 2, 3, 4, 5, 6])
另一答案
你可以使用or_
别名:
>>> from operator import or_
>>> reduce(or_, [{1, 2, 3, 4}, {3, 4, 5, 6}])
set([1, 2, 3, 4, 5, 6])
另一答案
假设你也不能使用相当于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])
另一答案
如果加入你的意思是工会,试试这个:
set(list(s) + list(t))
这有点像黑客,但我想不出更好的一个班轮来做到这一点。
另一答案
假设你有2个列表
A = [1,2,3,4]
B = [3,4,5,6]
所以你可以找到A
Union B
如下
union = set(A).union(set(B))
如果你想找到交叉点和非交叉点,你也可以这样做
intersection = set(A).intersection(set(B))
non_intersection = union - intersection
另一答案
如果你可以修改原始集(在某些情况下你可能想要这样做),你可以使用set.update()
:
S.update(T)
返回值是None
,但S
将更新为原始S
和T
的联合。
另一答案
你可以做union
或简单的列表理解
[A.add(_) for _ in B]
A将拥有B的所有元素
以上是关于如何在不使用“|”的情况下在一行中连接两个集合的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用集合运算符的情况下在 oracle 中查找不匹配的行并加入 & 还查询特定行的不匹配列名
如何在不更改构建系统的情况下在 C 项目中使用 rust 代码?
在不创建存储过程的情况下,如何在 Oracle 中将多行连接成一行? [复制]