web-dev-qa-db-ja.com

"|"を使わずに2行を1行で結合する方法

STがセットに割り当てられているとします。結合演算子|を使わずに、2つの集合の和集合を見つけるにはどうすればいいですか?これは、例えば、交差点を見つけます:

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

それでは、どうすれば|を使わずに1行に2セットの和集合を見つけることができるでしょうか?

119
fandyst

あなたは集合のために共用体メソッドを使うことができます:set.union(other_set)

それは新しいセットを返すことに注意してください、すなわちそれはそれ自身を変更しません。

224
ovrwngtvity

申し訳ありませんが、結合演算子をもう一度使用できないのはなぜですか。

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

or_エイリアスを使用できます。

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

s | tと同等のs.union(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])
19
arshajii

元のセットを変更することに問題がなければ(場合によっては変更したい場合があります)、set.update()を使用できます。

S.update(T)

戻り値はNoneですが、Sは元のSTの和集合になるように更新されます。

14
Max Candocia

加入することによってあなたが労働組合を意味するならば、これを試してください:

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

それはちょっとしたハックですが、それを実行するためのより優れたライナーを考えることはできません。

13
BenjaminCohen

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
9
iyogeshjoshi

あなたはunionまたは単純なリスト内包表記をすることができます

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

AはBのすべての要素を持ちます

6
Vaibhav Mishra