是否有可能通过使用某些条件将子列表中的元素与另一个元素合并?

问题描述

将子列表的元素与另一个没有重复的子列表合并


我正在解决车辆路径问题并获得最初的最佳解决方案,我想被利用并且需要在合并它们时摆脱重复的节点。 我的问题我想将元素 [8] 的子列表与其他携带条件等于 3 个元素的子列表合并,但因为有两个集合包含 3 个元素,如 [18,22,34,8],[35,36,37,8] 并且我需要将元素 8 随机集成到其中一个

bestsolution= [[22,15,20,2,32,30,4,17],[27,8,9,14,33,21,5,13],[26,28,6,31,11],[18,34],37],[8]]                              
for a in bestsolution:
    if len(a)==1: 
        p=a 
        del bestsolution[-1]         
        for b in bestsolution:  
            if len(b)==2: 
                b.extend(p) 
                print("p",b)
                print("bestsolution1-2",bestsolution)
            elif len(b)==3:
                b.extend(p) 
                print("p",b)
                print("bestsolution1-3",bestsolution)    
    my results:
    p [18,8]
bestsolution1-3 [[22,37]]
p [35,8]]

对于每个运行程序,我同时得到两个结果,所以怎么可能拒绝第二个解决方案。

'''

code targeted:
    bestsolution1-3 [[22,8]]
'''

谢谢

解决方法

回答/ 代码将是: '''

bestsolution= [[22,15,20,2,32,30,4,17],[2,3,4],[27,8,9,14,33,21,5,13],[26,28,6,31,11],[18,22,34],[35,36,37],[8]]    
    if len(a)==1: 
        p=a 
        del bestsolution[-1]        
        for b in bestsolution:  
            if len(b)==2: 
               b.extend(p) 
               print("p",b)
               print("bestsolution1-2",bestsolution)
               break
            elif len(b)==3:
               b.extend(p) 
               print("p",b)
               print("bestsolution1-3",bestsolution)
               break
            elif len(b)==4:
               b.extend(p) 
               print("p",b)
               print("bestsolution1-4",bestsolution)
               break

''' 预期输出:

p [18,34,8]
bestsolution1-3 [[22,8],37]]

''' 尝试了很多时间后我得到了最终结果,真的没想到我通过放置关键字(Break)解决的问题会阻止在第二次迭代中执行程序,所以我们只会得到一个解决方案。 如果有人有意见,我会很高兴。