我认为最好展示一下我正在努力做的事情。关键是我正在寻找一种优雅的方式这样做。
假设我有两个元组列表:
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。
关于如何以优雅的方式做到这一点的任何想法?
答案 0 :(得分:4)
你不能制作x
和y
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]