获取在python中彼此相交的集合的列表的列表

安德里亚·阿基诺(Andrea Aquino)

给定一个集合列表,我想得到一个相互交叉的集合列表的列表。基本上,我想要的是列表st的列表,该列表用于输出中的每个列表,该列表中的所有集合与同一列表中的至少另一个集合具有非空交集。

我希望我能够解释我的问题。希望下面的示例以及该帖子的其余部分可以进一步阐明它。

鉴于

sets = [
    set([1,3]), # A
    set([2,3,5]), # B
    set([21,22]), # C
    set([1,9]), # D
    set([5]), # E
    set([18,21]), # F
]

我想要的输出是:

[
    [
        set([1,3]), # A, shares elements with B
        set([2,3,5]), # B, shares elements with A 
        set([1,9]), # D, shares elements with A
        set([5]), # E shares elements with B
    ],
    [
        set([21,22]), # C shares elements with F
        set([18,21]), # F shares elements with C
    ]
]

输出中集合的顺序无关紧要。

我想用一个非常快的算法来实现这个目标。性能是我的首要要求。

目前,我的解决方案创建的图形的节点数与原始列表中的节点数相同。然后,如果这些集合具有非空交集,则在此图中在代表集合A和B的节点之间创建一条边。比它计算出这样一个图的连接组件,它给了我预期的结果。

我想知道是否有一种不涉及图形的算法来实现此目的的更快方法。

最好,安德里亚

阿比吉特

就像@MartijnPieters正确说的那样,问题需要图形,而networkx一臂之力

突出点

  1. 图的节点应设置
  2. 如果集相交,则图之间存在边
  3. 从结果图中找到所有连接的组件

实作

def intersecting_sets(sets):
    import networkx as nx
    G = nx.Graph()
    # Nodes of the graph should be hashable
    sets = map(frozenset, sets)
    for to_node in sets:
        for from_node in sets:
            # off-course you don't want a self loop
            # and only interested in intersecting nodes 
            if to_node != from_node and to_node & from_node:
                G.add_edge(to_node, from_node)
    # and remember to convert the frozen sets to sets
    return [map(set, lst) for lst in nx.connected_components(G)]

输出量

>>> intersecting_sets(sets)
[[set([2, 3, 5]), set([1, 3]), set([5]), set([1, 9])], [set([21, 22]), set([18, 21])]]
>>> pprint.pprint(intersecting_sets(sets))
[[set([2, 3, 5]), set([1, 3]), set([5]), set([1, 9])],
 [set([21, 22]), set([18, 21])]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从python中的元组或集合列表中找到不相交集合的集合

来自分类Dev

python中的相交列表不起作用

来自分类Dev

如何检查列表中的集合是否是彼此的子集?

来自分类Dev

Python:在集合列表中获取最大值

来自分类Dev

python中列表列表的集合

来自分类Dev

在Python中合并列表/集合的集合

来自分类Dev

从列表列表中输出在其他所有元素列表中不相交的元素集合图

来自分类Dev

从mongo数据库集合中获取集合的特定列表

来自分类Dev

列表列表中的元素彼此相乘

来自分类Dev

Python3 字符串列表的集合、相交和并集

来自分类Dev

Python3中列表内容彼此相乘的Pythonic方式

来自分类Dev

在python列表中查找彼此相邻的相似项目

来自分类Dev

python中的集合列表的笛卡尔积

来自分类Dev

使用Python中的嵌套列表理解从mongo集合中获取所有文档

来自分类Dev

R中列表中相交向量的并集

来自分类Dev

组合列表中的集合

来自分类Dev

Python,从列表中获取元素

来自分类Dev

Python从列表中获取int?

来自分类Dev

根据flutter中的数组列表中的值获取Firestore集合

来自分类Dev

如何在python中获取文件列表的列表列表?

来自分类Dev

如何获取列表集合的增量

来自分类Dev

Python与条件相交两个列表

来自分类Dev

Python与条件相交两个列表

来自分类Dev

删除数组列表中的相交值

来自分类Dev

在mysql中相交逗号分隔的列表

来自分类Dev

如何从mongodb的集合中获取键的完整列表

来自分类Dev

如何从Sails JS Waterline集合中获取指定字段的列表?

来自分类Dev

Shopify-从特定集合中获取产品列表

来自分类Dev

获取嵌套字典中唯一值的列表(或集合)

Related 相关文章

热门标签

归档