【问题标题】:Python - Group class objects in lists according to attributesPython - 根据属性对列表中的类对象进行分组
【发布时间】:2019-08-12 10:56:57
【问题描述】:

我面临着根据连接索引将包含对象(类)的列表细分为两个列表的挑战:

列表中的每一项都是一个类对象,其中包含:

Obj1.a = var
Obj1.b = [1, 12] 

查看以下对象的伪列表:

list= [ [[var, [1, 12]], [var, [2, 0]], [var, [3, 1]] , [var, [4, 2]], [var, [5, 3]], [var, [7, 4]], [var, [11, 8]], [var, [12, 10]], [var, [0, 11]], [var, [19, 13, 7]], [var, [5, 18, 17] ], [var, [21, 19]], [var, [20, 17]], [var, [21, 22]], [var, [ 23, 20]], [var, [28, 22]], [var, [26, 23]], [var, [13, 8, 28]], [var, [10, 26,18]] ]

  1. 请注意,方法 b 返回 2 或 3 个索引号。
  2. 顺序不正确。

目标是从列表中的第 1 项开始,检查具有至少一个共同索引的下一项(“第 2 项”),然后将“第 2 项”附加到新列表中。接下来,取“项目2”并制作相同的,依此类推……

在上面的代码中,我用粗体标记了应该组合在一起的项目。 有任何想法吗?

输出:

list_A = [ [[var, [1, 12]], [var, [3, 1]], [var, [5, 3]], [var, [12, 10]], [var, [5, 18, 17]], [var, [20, 17]], [var, [23, 20]], [var, [26, 23]], [var, [10, 26,18]] ]

list_B = [ [var, [2, 0]], [var, [4, 2]], [var, [7, 4]], [var, [11, 8]], [var, [0, 11]], [var, [19, 13, 7]], [var, [21, 19]], [var, [21, 22]],  [var, [28, 22]], [var, [13, 8, 28]] ]

【问题讨论】:

    标签: python class object linked-list grouping


    【解决方案1】:

    我部分解决了这个问题,但我想返回两个列表,而不仅仅是一个。此外,如果我们再次通过函数更改元素,结果是一个空列表。有任何想法吗?请参阅下面的代码:

        list_total = [[1000, [1, 12]], [2000, [2, 0]],
                      [1000, [3, 1]] , [2000, [4, 2]],
                      [1000, [5, 3]] , [2000, [7, 4]], 
                      [2000, [11, 8]], [1000, [12, 10]], 
                      [2000, [0, 11]], [2000, [19, 13, 7]],
                      [1000, [5, 18, 17]], [2000, [21, 19]],
                      [1000, [20, 17]], [2000, [21, 22]],
                      [1000, [23, 20]], [2000, [28, 22]],
                      [1000, [26, 23]], [2000, [13, 8, 28]],
                      [1000, [10, 26,18]]]
    
        def chain(lst, elem):
    
            if elem in lst:
               lst.remove(elem)
    
            for e1 in elem[1]:
                for e2 in lst:
                    if e1 in e2[1]:
                        chain(lst, e2)                
    
            level = lst
            return level
    
        level_A = chain(list_total, list_total[0])
        print ("level_A: ", level_A)
    
        level_B = chain(list_total, list_total[1])
        print ("level_B: ", level_B)
    
    
        output: level_A:  [[2000, [2, 0]], [2000, [4, 2]], [2000, [7, 4]],
                           [2000, [11, 8]], [2000, [0, 11]], [2000, [19, 13, 7]], 
                           [2000, [21, 19]], [2000, [21, 22]], 
                           [2000, [28, 22]], [2000, [13, 8, 28]]]
    
                level_B:  []
    

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2023-02-07
      • 2021-06-27
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多