python - 多个python列表的列交集

标签 python numpy

假设您有一个列表列表,如下所示:

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/

相关文章:

python - 在客户端计算机上下载文件后,文件权限会发生变化

python - NumPy 中的多处理

python - 有没有办法加快python中的嵌套for循环?

python - Numpy 点积

python - 为什么 numpy.ndarray.resize() 返回 None

Python 队列问题 - queue.get 不删除对象

python - “ForeignKey”对象没有属性

python - 对正则化数据使用 SciPy fmin_bfgs() 发出警告

python - 将条目添加到字典列表中

python - 高效的 ndarray 操作