如何在不使用“|”的情况下在一行中连接两个集合

时间:2013-07-02 15:05:52

标签: python set

假设ST已分配集。不使用连接运算符|,如何找到两个集合的并集?例如,这可以找到交叉点:

S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }

那么如何在不使用|的情况下在一行中找到两个集合的并集?

9 个答案:

答案 0 :(得分:218)

您可以对集合使用union方法:set.union(other_set)

请注意,它会返回一个新集,即它不会自行修改。

答案 1 :(得分:115)

抱歉,为什么我们不能再次使用加入运算符?

>>> set([1,2,3]) | set([4,5,6])
set([1, 2, 3, 4, 5, 6])

答案 2 :(得分:32)

您可以使用or_别名:

>>> from operator import or_
>>> reduce(or_, [{1, 2, 3, 4}, {3, 4, 5, 6}])
set([1, 2, 3, 4, 5, 6])

答案 3 :(得分:19)

假设您也无法使用等同于s.union(t)的{​​{1}},您可以尝试

s | t

或者,如果你想要理解,

>>> from itertools import chain
>>> set(chain(s,t))
set([1, 2, 3, 4, 5, 6])

答案 4 :(得分:12)

如果加入你的意思是工会,试试这个:

set(list(s) + list(t))

这有点像黑客,但我想不出更好的一个班轮来做到这一点。

答案 5 :(得分:12)

如果你可以修改原始集(在某些情况下你可能想要这样做),你可以使用set.update()

S.update(T)

返回值为None,但S将更新为原始ST的联合。

答案 6 :(得分:9)

假设您有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

答案 7 :(得分:9)

您可以像这样将两个包装拆成一个包装:

>>> 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},因为该集合只能包含唯一项。

答案 8 :(得分:6)

您可以执行union或简单列表理解

[A.add(_) for _ in B]

A将拥有B

的所有元素