2013-07-02 22 views
82

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

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

だから私は|を使用せずに1行に2つのセットの和集合を見つけることができますか?

+0

あなたは結合する必要がありますか?そうなら、s.union(t) –

+2

(S^T)^(S&T) – mata

+17

なぜ '|'を使用できないのですか? –

答えて

13

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]) 
10

参加するあなたは労働組合を意味することにより場合試してみてください:

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

これは少しハックですが、私は考えることができませんそれを行うためのより良い1つのライナー。それ自体は変更されません。すなわち、それは新しいセットを返すことset.union(other_set)

注:

+0

集合(リスト(s)+リスト(t))は、あなたが組合を行う場合に同じ結果を与えます。 –

+0

私は気付いていますが、彼はPythonの組み込み関数の使用を避けようとしていたようです。そうでなければ、|オペレーター。 – BenjaminCohen

144

あなたはセットのために労働組合の方法を使用することができます。

あなたが or_別名使用することができ
+15

しかし、 '|'は変数をインラインで変更することができます: 'set_a | = set_b' – jorgenkg

+4

@jorgenkgは' set_a = set_a.union(set_b) 'と同じです。 "インプレース"を意味する場合、どちらも実行しません。両方とも新しいセットを作成します。 – nitely

+1

@nitely no、 '| ='を使用して変数 'a'を変更します。 – jorgenkg

25

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

はこのアプローチを愛し、より機能的で、2つ以上のセットに適用することができます。 –

6

は、あなたがしたい場合も

union = set(A).union(set(B)) 

に従うようにあなたがA連合Bを見つけることができますが、2つのリスト

A = [1,2,3,4] 
B = [3,4,5,6] 

を持っていると仮定し交差点と交差点を見つけたら、それをf ollow

intersection = set(A).intersection(set(B)) 
non_intersection = union - intersection 
73

申し訳ありませんが、なぜ私たちは再び結合演算子を使用できませんか?

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

私は彼がそれを使用しないように指定されている宿題のためにできないと思う| &演算子。 – Bacon

+7

これは質問に答えなかった。 – pylang

4

あなたはあなたがしたいことがあり、元のセットを(変更すると罰金している場合、AはB

0

のすべての要素を持っているでしょうunionまたは単純なリスト内包表記

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

を行うことができます場合によってはset.update()を使用できます。

S.update(T) 

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

関連する問題