寻找一种优雅的方法来找到两个不同顺序的单词元组列表之间的交集
Looking for an elegant way of finding the intersection between two lists of words' tuples in different orders
我认为最好举例说明我正在尝试做的事情。关键是我正在寻找一种优雅的方式。
假设我有两个元组列表:
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 也一样] ,两者对我来说都是一样的,在这种情况下它应该 return 索引 2 。
关于如何以优雅的方式做到这一点有什么想法吗?
你不能制作 x
和 y
set
吗?
例如:
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]
returns: [False, True, True]
如果你想要实际的指数:
[i for i, y_element in enumerate(set_y) if y_element in set_x]
returns: [1, 2]
我认为最好举例说明我正在尝试做的事情。关键是我正在寻找一种优雅的方式。
假设我有两个元组列表:
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 也一样] ,两者对我来说都是一样的,在这种情况下它应该 return 索引 2 。
关于如何以优雅的方式做到这一点有什么想法吗?
你不能制作 x
和 y
set
吗?
例如:
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]
returns: [False, True, True]
如果你想要实际的指数:
[i for i, y_element in enumerate(set_y) if y_element in set_x]
returns: [1, 2]