假设您有一个列表列表,如下所示:
A = [
[(1, 9), (2, 10), (3, 11), (4, 12), (5, 13), (6, 14), (7, 15), (8, 16)],
[(1, 19), (2, 110), (13, 1), (41, 112), (51, 131), (16, 141), (17, 15), (18, 16)],
[(1, 299), (2, 1310), (13, 111), (41, 112), (51, 131), (16, 141), (17, 15), (18, 16)]
]
我正在寻找的是查找列表中现有元组的列之一的交集的最快方法。例如,如果我需要找到 x0 上的列交集,其中每个子列表由 (x0, x1) 组成,那么输出应该是:
out = [(1,9), (1,19), (2, 10), (2, 110), (1, 299), (2, 1310)]
这基本上是具有第一列相似值的所有元素的集合。
我用来找到一个简单的交集来匹配整个元组的方法基本上是(它给出了所有子列表的完整匹配):
out = set.intersection(*map(set, A))
任何帮助都会很棒。谢谢。
最佳答案
三个步骤:
1) 制作 x0 元素集合的列表。
2)找到这些步骤的交集。
3) 最后,列出所有 (x0, x1) 对,其中 x0 位于重叠集中。
方法如下:
>>> first_elems = [{x0 for x0, x1 in sublist} for sublist in A]
>>> overlaps = set.intersection(*first_elems)
>>> [(x0, x1) for sublist in A for x0, x1 in sublist if x0 in overlaps]
[(1, 9), (2, 10), (1, 19), (2, 110), (1, 299), (2, 1310)]
关于python - 多个python列表的列交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22445929/