小能豆

按另一个列表的顺序对python列表进行排序并检索旧索引

py

尝试检索已排序列表“second”的索引。“second”包含与“first”相同的值,并将重新排序为与“first”相同的顺序。我正在寻找一个索引列表“d”,其中包含来自旧“second”的重新排序索引。

尝试使用 zip 或 enumerate 检索“d”,但失败了。

first= [(11.373,0.354,6.154),(22.354,0.656,0.664),(33.654,33.546,31.131)]
second=[(22.354,0.656,0.664),(33.654,33.546,31.131),(11.373,0.354,6.154)]

second=sorted(second,key=first.index)

print(first)
print(second)
[(11.373, 0.354, 6.154), (22.354, 0.656, 0.664), (33.654, 33.546, 31.131)]
[(11.373, 0.354, 6.154), (22.354, 0.656, 0.664), (33.654, 33.546, 31.131)]

这里“second”的顺序与“first”相同。太棒了。但是我如何从“second”中检索重新排序的索引列表“d”呢?

我尝试过: d = [i[0] for i in sorted(enumerate(second), key=first.index)]

在此示例中,“d”应变为 [2,0,1]

这种类型的密钥在某种程度上阻碍了检索旧索引的可能性。有什么建议吗?


阅读 28

收藏
2024-12-25

共1个答案

小能豆

这是一种方法。

first= [(11.373,0.354,6.154),(22.354,0.656,0.664),(33.654,33.546,31.131)]
second=[(22.354,0.656,0.664),(33.654,33.546,31.131),(11.373,0.354,6.154)]

temp = sorted(second,key=first.index)            #Sorted List. 
d = list(map(lambda x: second.index(x), temp))   #Fetch index from temp

print(first)
print(temp)
print(d)

输出:

[(11.373, 0.354, 6.154), (22.354, 0.656, 0.664), (33.654, 33.546, 31.131)]
[(11.373, 0.354, 6.154), (22.354, 0.656, 0.664), (33.654, 33.546, 31.131)]
[2, 0, 1]
2024-12-25