python - 我有一个列表列表,如何提取具有公共(public)值的子列表的索引?

标签 python

我想要以下具有重叠元素的列表列表中的项目索引。

slist = [[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4], [7, 8, 9, 10]]

输出应该是这样的:

[0,1,2] and [3]

我尝试了以下方法,但它给了我成对的值,很难像我期望的那样从中分离出值

    for ((i,a),(j,b)) in itertools.combinations(enumerate(slist),2):
        if len(a.intersection(b)) > 0:
            print("overlapping",i,j)
        else:
            print("non overlapping",i,j)
Output:
('non overlapping', 0, 1)
('non overlapping', 0, 2)
('overlapping', 0, 3)
('overlapping', 1, 2)
('non overlapping', 1, 3)
('non overlapping', 2, 3)

最佳答案

您可以使用列表理解来做到这一点:

>>> slist = [[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 4], [7, 8, 9, 10]]
>>> sets = tuple(map(set, slist))
>>> list(map(list, {tuple(i for i, _s in enumerate(sets) if s & _s) for s in sets}))
[[0, 1, 2], [3]]

如果它使它更具可读性/可理解性,我只是使用 map 将元组再次制作成列表。您需要使用元组,因为列表和集合是不可散列的。如果您不映射列表,那么它的可读性更高,但它会生成一个元组列表。

list({tuple(i for i, _s in enumerate(sets) if s & _s) for s in sets}))

关于python - 我有一个列表列表,如何提取具有公共(public)值的子列表的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56853652/

相关文章:

python - 如何在启动时运行 python 程序(包含 tkinter)

python - Micropython 链式移位寄存器的行为不符合预期

python - 多项式元素矩阵

python - Pandas:检查一个数字是否连续多次出现

python - 如何为图像中的对象着色每个颜色不同

python - 给定未排序的其他约束,标准化数据框中的值

python - 如何在 matplotlib 极坐标 2D 直方图中创建曲线箱?

python - 如何在 pandas 的组中创建一个具有最后一个值和第一个值之间差异的列

python - 使用boto3下载Lambda函数的部署包

python - python 中的身份验证如何工作?