所以我有一个列表的原始列表 oList ,子列表是数字序列。我创建了另一个列表 srt 来操纵数据:
#...
srt = []
for i in range(len(oList)):
srt.append([ int(oList[i][0]), int(oList[i][2]), i ])
因此 srt 的每个元素都是[ n0 , n2 , idx ](或类似的东西,重点是我保持原始元素的索引从 oList 作为最后一个元素)...
现在我想通过( n0 , n2 ... ni )对其进行排序,并将索引作为另一个 idx映射列表的创建。 srt.sort()
第一部分做得很好,但手动生成映射对我来说似乎效率低下。
所以我希望 srt 按 n0 , n1 ... ni 和其他列表进行排序映射以包含原始元素的索引。
在循环中处理数据时,我希望能够(当我需要时)从 srt 通过 idx 获取某些元素,如:something = srt[map[idx]][0]
示例:
# srt=[ [12,8,0], [-4,4,1], [-4,-2,2], [6,8,3], ]
map, srt = custom_sort_here(srt)
# srt=[ [-4,-2,2], [-4,4,1], [6,8,3], [12,8,0], ]
# map=[ 3, 1, 0, 2, ]
# here i can get element with idx=2 from srt like:
el = srt[map[2]]
P.S。 atm我将排序后的索引作为循环执行:
#...
srt.sort()
map = range(len)
for x in range(len):
map[srt[x][2]]=x #for 2-number lists where idx at [2]
所以这是非常低效的,这就是我的问题的原因 - 我的意思是它确实可以在排序时创建映射结构,而我只是不知道怎么样我&# 39;我是Python的新手......
P.P.S。如果你想知道为什么我想要这样奇怪的行为 - 它与3D网格处理有关,所以我真的需要保持原始点值+多边形数据,同时操纵投影[2]坐标和/或谨慎(近似)的重复点数组[3]原始点的坐标值。沿着轴/向量循环它们,而有时仍然根据多边形边连接通过索引获得一些点。所以我真的需要那种数据布局。
答案 0 :(得分:0)
这可能正是您所寻找的,但确保需要一个具有预期输出的完整工作示例。
srt= [ [12,8,0], [-4,4,1], [-4,-2,2], [6,8,3] ]
srt_enum = dict(sorted(enumerate(srt), key=lambda x: x[1]))
# {2: [-4, -2, 2], 1: [-4, 4, 1], 3: [6, 8, 3], 0: [12, 8, 0]}
srt_enum_lst = sorted(srt_enum.items(), key=lambda x: x[1])
# [(2, [-4, -2, 2]), (1, [-4, 4, 1]), (3, [6, 8, 3]), (0, [12, 8, 0])]
srt_enum[2]
# [-4, -2, 2]