python从lis派生的列表的最小分组数

2024-05-20 16:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

从nestedList中,我必须将此列表分组到尽可能少的组中,组中的所有列表彼此之间没有交叉。然后组也不应该有交集,这意味着嵌套列表中的每个列表在所有组中只出现一次。 e、 g

[[1,2,3],[4,5,7],[52,12,1],[91239,21,1],[3,5,6],[6,8,10]]
[1,2,3],[4,5,7],[6,8,10]
[52,12,1],[3,5,6]
[91239,21,1]

此外,应使用字典为组标记数字。使用1-10,我必须使用尽可能少的数字,所以如果我调用groupings键的值在大多数时候应该相等{[1,2,3]:'1',[4,5,7]:'1',[6,8,10]:'1', [52,12,1]:'2',[3,5,6]:'2', [91239,21,1]:'3'}

我现在正在做一个更大的列表,到目前为止,我已经得出了以下结论:

    def disjoint(a, b):
         for i in a:
            if i in b:
                return False
         return True

    numberassignments = ['1','2','3','4','5','6','7','8','9','10']
    groupings = {}
    for i in numberassignments:
        for j in range(len(list)):
            if list[j] not in groupings:
                groupings[list[j]] = i
                for k in range(list):
                    if disjoint(list[j], list[k]) and list[k] not in groupings:
                        grouped = [l for l in groupings if groupings[l] == i]
                        if all(disjoint(m, list[k]) for m in grouped):
                            groupings[list[k]] = i

到目前为止,我的代码能够在没有交集的情况下对列表进行分组,我的问题是,我不知道是否对列表进行了尽可能少的分组,甚至不知道如何编码以优化组的数量。我问过的人告诉我这应该和图论有关,我完全不知道(我确实理解顶点是列表,边是它们的交点,但是我用这些知识怎么办?)。 禁忌:没有图书馆


Tags: in列表forreturnifnotrange数字