将指针排序到python中的列表

时间:2018-04-13 07:08:02

标签: python

我在这个网站上潜伏了一段时间,但这是我的第一个问题。所以对我很轻松。

在python中,我想获取一个数字列表并在该列表中生成一个已排序的索引。

例如:value = [-3 1 4 -1],那么排序后的索引(假设升序排序)应为= [0 2 3 1]

如何生成此排序索引?我需要使用这个排序索引来修改另一个列表。

3 个答案:

答案 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)