Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找列表中插入的匹配项并维护后续列表中的顺序_Python_List - Fatal编程技术网

Python 查找列表中插入的匹配项并维护后续列表中的顺序

Python 查找列表中插入的匹配项并维护后续列表中的顺序,python,list,Python,List,我收到了一系列包含3D曲线数据的列表。曲线开始时非常非常小,列表中的曲线越长,它就越大 问题是,所有这些列表一开始都是按顺序排列的,但随后会插入新项,而不是追加新项 棘手的部分是,我需要跟踪哪些项目会在列表中进一步突出。因此,如果在list1=[A,B,C]中插入了一个新的字母,就像list2=[A,D,B,C]一样,我需要知道list2[3]与list1[2]相同,然后在后续的列表中保持这一点,直到插入一个新的项目并将其偏移 在我的例子中,我还有其他属性,比如大小,可以帮助确定新项目具体添加到

我收到了一系列包含3D曲线数据的列表。曲线开始时非常非常小,列表中的曲线越长,它就越大

问题是,所有这些列表一开始都是按顺序排列的,但随后会插入新项,而不是追加新项

棘手的部分是,我需要跟踪哪些项目会在列表中进一步突出。因此,如果在
list1=[A,B,C]
中插入了一个新的字母,就像
list2=[A,D,B,C]
一样,我需要知道
list2[3]
list1[2]
相同,然后在后续的列表中保持这一点,直到插入一个新的项目并将其偏移

在我的例子中,我还有其他属性,比如大小,可以帮助确定新项目具体添加到哪里。如果尺寸较小(例如0.01),则为新的。但尺寸不足以匹配,因为它与其他类似。因此,我想重新整理订单,以跟踪情况

List_0 = [[1, 0.01], [2, 0.0], [3, 0.0]]
List_1 = [[1, 1.1], [2, 1.2], [3, 1.12]]
List_2 = [[1, 2.3], [2, 2.23], [4, 0.01], [5,0.02], [3,2.25]
List_3 = [[6, 0.01], [1, 3.45], [2, 3.54], [4, 1.12], [5, 1.11], [3,3.65]]
 

这个例子很简单,但它可以扩展到列表中1000个条目。这似乎是一个非常简单的重新排序/重新映射问题,但我正在绞尽脑汁试图弄明白这一点。非常感谢您的帮助。

我最终解决了这个问题,将新列表与以前的列表长度进行了比较,如果新列表更长,则会出现一个或多个新项目。我专门通过检查它们的大小来检测新的物品。然后我更新了“匹配列表”,它告诉我哪些新项目是在哪里添加的,以及添加的顺序

我最初想得太多了,并假设我需要跟踪所有列表的列表顺序。但我只需要对照前面的列表进行跟踪

my_Lists = [[[1, 0.01], [2, 0.0], [3, 0.0]], 
            [[1, 1.1], [2, 1.2], [3, 1.12]], 
            [[1, 2.3], [2, 2.23], [4, 0.01], [5, 0.02], [3, 2.25]], 
            [[6, 0.01], [1, 3.45], [2, 3.54], [4, 1.12], [5, 1.11], [3,3.65]]
            ]

longest_List_Index = len(my_Lists[0])
prev_Match_List = []
match_List = [] # [0, 1, 2, 3, 4] or when updated [0, 1, 2, 5, 3, 4]

for index, my_List in enumerate(my_Lists):
    
    if index == 0:
        
        for pos, sub_List in enumerate(my_List):
            match_List.append(sub_List[0])
        print "Base list #1"
        print "\t" + "Prev match: " + str(prev_Match_List) + " " + "New match: "  + str(match_List)
        print ""
        prev_Match_List = match_List[:]
            
    else:
        
        if len(my_List) > longest_List_Index:
            longest_List_Index = len(my_List)
            print "Detected longer list in list #" + str(index)

            for pos, sub_List in enumerate(my_List):         
                if sub_List[1] > 0 and sub_List[1] < .1:
                    found_New = True
                    print "\tNew entry at index: " + str(pos), sub_List      
                    match_List.insert(pos, sub_List[0])
                    

            if found_New:
                print "\t" + "Prev match: " + str(prev_Match_List) + " " + "New match: "  + str(match_List)
                
                # update the match list
                prev_Match_List = match_List[:]
                
            print ""
my_list=[[1,0.01]、[2,0.0]、[3,0.0],
[[1, 1.1], [2, 1.2], [3, 1.12]], 
[[1, 2.3], [2, 2.23], [4, 0.01], [5, 0.02], [3, 2.25]], 
[[6, 0.01], [1, 3.45], [2, 3.54], [4, 1.12], [5, 1.11], [3,3.65]]
]
最长\u列表\u索引=len(我的\u列表[0])
上一个匹配列表=[]
匹配列表=[]#[0,1,2,3,4]或更新时[0,1,2,5,3,4]
对于索引,枚举中的my_列表(my_列表):
如果索引==0:
对于pos,枚举中的子列表(我的列表):
匹配列表。追加(子列表[0])
打印“基本列表#1”
打印“\t”+“上一个匹配:”+str(上一个匹配列表)+“+”新匹配:”+str(匹配列表)
打印“”
上一个匹配列表=匹配列表[:]
其他:
如果len(我的列表)>最长的列表索引:
最长列表索引=len(我的列表)
打印“在列表#中检测到较长的列表”+str(索引)
对于pos,枚举中的子列表(我的列表):
如果子列表[1]>0且子列表[1]<0.1:
发现新的=真的
打印“\t索引处的新条目:”+str(pos),子列表
匹配列表。插入(位置、子列表[0])
如果发现新的:
打印“\t”+“上一个匹配:”+str(上一个匹配列表)+“+”新匹配:”+str(匹配列表)
#更新匹配列表
上一个匹配列表=匹配列表[:]
打印“”

您尝试过什么?请把你所做的尝试和面临的问题写下来。