2016-03-29 128 views
0

我認爲它最好展示我正在嘗試做的一個例子。重點是我正在尋找一個優雅的方式這樣做。尋找一種尋找不同順序的兩個單詞元組列表之間交集的優雅方式

比方說,我有元組的兩個列表:

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

如果我計算x和y之間的十字路口,我得到一個空集。

我的目標是找出y中有兩個元素與x中的兩個元素相同,而我不關心元組的不同順序。另外我想得到列表y的匹配元素的索引。對於我x [0]和y [1]是相同的(同樣,不關心順序),我想要得到的索引是1,對於x [1]和y [2]是相同的。 ,兩者對我來說都是一樣的,在這種情況下它應該返回索引2。

有關如何以優雅的方式做到這一點的任何想法?

回答

4

難道你不能讓你的xyset s? 例如: -

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'的角色切換到[set_y中的x_element]將返回[[1,2]]的set_x中的[set_y.index(x_element)]。 – acdr

相關問題