S
とT
がセットに割り当てられているとします。結合演算子|
を使わずに、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セットの和集合を見つけることができるでしょうか?
あなたは集合のために共用体メソッドを使うことができます:set.union(other_set)
それは新しいセットを返すことに注意してください、すなわちそれはそれ自身を変更しません。
申し訳ありませんが、結合演算子をもう一度使用できないのはなぜですか。
>>> 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 | 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])
元のセットを変更することに問題がなければ(場合によっては変更したい場合があります)、set.update()
を使用できます。
S.update(T)
戻り値はNone
ですが、S
は元のS
とT
の和集合になるように更新されます。
加入することによってあなたが労働組合を意味するならば、これを試してください:
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
あなたはunion
または単純なリスト内包表記をすることができます
[A.add(_) for _ in B]
AはBのすべての要素を持ちます