2016-03-29 9 views
0

私は何をしようとしているかの例を示すのが最善だと思います。ポイントは、私が優雅な方法を探していることですそうしています。私は空のセットを取得し、xとyとの交点を計算する場合異なる順序の単語のタプルの2つのリスト間の交差を見つけるためのエレガントな方法をお探しください

x = [('a', 'c', 'e'), ('k', 'n')] 
y = [('e', 'd', 'w'), ('c', 'a', 'e'), ('n', 'k')] 
z = set(x).intersection(y) 

のは、私はタプルの二つのリストがあるとしましょう。

私の目標は、xの2つの要素と同じ2つの要素がyにありますが、タプルの順番は気にしません。また、私はのリストyの一致する要素のインデックスを取得したいと思います。

x [0]とy [1]は同じです(順序は気にしません)。取得したいインデックスは1、x [1]とy [2]両方とも私にとっては同じで、この場合はインデックス2を返さなければなりません。

エレガントな方法でこれを行う方法に関するアイデアはありますか?

答えて

4

xysetはできませんか? 例えば:

x = [('a', 'c', 'e'), ('k', 'n')] 
y = [('e', 'd', 'w'), ('c', 'a', 'e'), ('n', 'k')] 
set_x = set(frozenset(a) for a in x) 
set_y = [frozenset(a) for a in y] 
[y_element in set_x for y_element in set_y] 

リターン:[False, True, True]

あなたは、実際のインデックスしたい場合:

[i for i, y_element in enumerate(set_y) if y_element in set_x] 

リターン:[1, 2]

+0

を私は彼をyでインデックスを望んでいたと思うので、列挙?また、set_xをfrozensetsのセットにすることもできます。 –

+0

代わりにfrozensetsを使用してください。リストの代わりにset_xをセットします。 – IceArdor

+1

その場合、 'set_x'と' set_y'の役割を切り替えるだけで、 '[1、2]'を返す 'set_y in set_y inindex_(x_element)in set_y 'を得ることができます。 – acdr

関連する問題