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

1 回答 1

4

你不能做你的xy sets吗?例如:

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]

于 2016-03-29T08:30:05.193 回答