2016-10-21 10 views
-3

の交差点にだから私は実行して二つのリストの交差点を見つける方法を知らない検索:要素は二つのリスト

>>> a = [1,2,3,4,5] 
>>> b = [1,3,5,6] 
>>> list(set(a) & set(b)) 
[1, 3, 5] 

をしかし、中に含まれていないすべての要素を見つけるための最善の方法は何か交差点。

>>> a = [1,2,3,4,5] 
>>> b = [1,3,5,6] 
>>> intersection = list(set(a) & set(b)) 
>>> union = list(set(a) | set(b)) 
>>> non_intersection = intersection - union 
[2, 4, 6] 

が、これはこれを行うための最善の方法であるか、別の方法がある:私の最初のアイデアは、次のような、二つのリストの和集合を作成し、組合からの交差点からすべての要素を削除するのですか?

+4

あなたは対称差と呼ばれて探しているもの。セットにはメソッドがあります。 googlingしてみてください。 – BrenBarn

+1

BrenBarnが言ったことを追加するには、 '&'の代わりに '^'を使います。 – MooingRawr

+0

これはドキュメントに記載されています。これは、 "python set methods"の下の[first hit](https://docs.python.org/2/library/stdtypes.html#set)です。どのようにあなたはあなたの検索でそれを見つけられませんでしたか? – Prune

答えて

3

対称的な違いは?

>>> set(a).symmetric_difference(b) 
{2, 4, 6} 
+1

'symmetric_difference'は任意のiterableを取ります。したがって、' set'への2回目の呼び出しの必要はありません。 –

+0

クール、逃した、ありがとう – ubundows

1

私は通常のショートカットを好む:

set(a)^set(b) 
{2, 4, 6} 
+0

ちょうど@MooingRawrが質問の下のコメントで言ったことを実現... –