Python 查找列表中插入的匹配项并维护后续列表中的顺序
我收到了一系列包含3D曲线数据的列表。曲线开始时非常非常小,列表中的曲线越长,它就越大 问题是,所有这些列表一开始都是按顺序排列的,但随后会插入新项,而不是追加新项 棘手的部分是,我需要跟踪哪些项目会在列表中进一步突出。因此,如果在Python 查找列表中插入的匹配项并维护后续列表中的顺序,python,list,Python,List,我收到了一系列包含3D曲线数据的列表。曲线开始时非常非常小,列表中的曲线越长,它就越大 问题是,所有这些列表一开始都是按顺序排列的,但随后会插入新项,而不是追加新项 棘手的部分是,我需要跟踪哪些项目会在列表中进一步突出。因此,如果在list1=[A,B,C]中插入了一个新的字母,就像list2=[A,D,B,C]一样,我需要知道list2[3]与list1[2]相同,然后在后续的列表中保持这一点,直到插入一个新的项目并将其偏移 在我的例子中,我还有其他属性,比如大小,可以帮助确定新项目具体添加到
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(匹配列表)
#更新匹配列表
上一个匹配列表=匹配列表[:]
打印“”
您尝试过什么?请把你所做的尝试和面临的问题写下来。