我在这个网站上潜伏了一段时间,但这是我的第一个问题。所以对我很轻松。
在python中,我想获取一个数字列表并在该列表中生成一个已排序的索引。
例如:value = [-3 1 4 -1]
,那么排序后的索引(假设升序排序)应为= [0 2 3 1]
如何生成此排序索引?我需要使用这个排序索引来修改另一个列表。
答案 0 :(得分:1)
这是使用标准Python库函数优雅地完成的:
values = [-3, 1, 4, -1]
i_sorted = sorted(range(len(values)), key=lambda i: values[i])
print(i_sorted)
# The next 3 lines rearrange the array to address Drecker's comment
i_order = [None] * len(i_sorted)
for n, k in enumerate(i_sorted):
i_order[k] = n
print(i_order)
[0, 3, 1, 2]
[0, 2, 3, 1]
Drecker是正确的,我的解决方案没有回答这个问题。我在排序后添加了三行代码来重新排列列表。不再那么优雅,但我看不到更好的解决方案。
答案 1 :(得分:0)
使用纯Python的另一种方法是:
values = [-3, 1, 4, -1]
values = [i[0] for i in sorted(enumerate(values), key=lambda i: i[1])]
print(values)
输出:
[0, 3, 1, 2]
答案 2 :(得分:-1)
试试这个:
import numpy as np
value = [-3, 1, 4, -1]
np.argsort(value)