寻找一种优雅的方式来查找不同顺序的两个单词列表之间的交集

时间:2016-03-29 08:20:20

标签: python nlp tuples intersection collocation

我认为最好展示一下我正在努力做的事情。关键是我正在寻找一种优雅的方式这样做。

假设我有两个元组列表:

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。

关于如何以优雅的方式做到这一点的任何想法?

1 个答案:

答案 0 :(得分:4)

你不能制作xy set吗? E.g:

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]