Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中指向列表的排序指针_Python - Fatal编程技术网

python中指向列表的排序指针

python中指向列表的排序指针,python,Python,我在这个网站上潜伏了一段时间,但这是我的第一个问题。所以对我放松点 在python中,我想获取一个数字列表,并在该列表中生成一个排序索引 例如:value=[-314-1],则排序后的索引(假定升序排序)应为=[0231] 如何生成此排序索引?我需要使用此排序索引来修改另一个列表。让我们尝试一下: import numpy as np value = [-3, 1, 4, -1] np.argsort(value) 使用纯Python的另一种方法是: values = [-3, 1, 4, -

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

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

例如:
value=[-314-1]
,则排序后的索引(假定升序排序)应为=
[0231]

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

让我们尝试一下:

import numpy as np
value = [-3, 1, 4, -1]
np.argsort(value)

使用纯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]

这是通过标准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]

德雷克是正确的,我的解决方案没有回答这个问题。我添加了三行代码,以便在排序后重新排列列表。不再那么优雅了,但我找不到更好的解决方案。

你说的“排序指针”是什么意思?排序索引?Python没有指针,也许你是说位置索引?如果你一直像你所说的那样潜伏着,那么你就会知道我们希望看到你的尝试。对于小列表,你可能会得到类似
indexList=[value.index(item)For item in sorted(value)]
的东西,但是对于这个问题肯定有更有效的解决方案。亲爱的,这就是我需要的。我到处查看排序,它只是展示了如何打印排序后的数组。非常感谢!argsort只用于整数吗?还是浮动?我得到“builtins.TypeError:只有包含一个元素的整数数组才能转换为索引”@BrianKorsedal如果可以,请检查:)使用float也可以numpy有什么问题,我在这个示例中运行ok使用numpy.argsort的早期方法应该可以工作,但在我的设置中抛出了一个错误。这个确实有用。谢谢此解决方案不会回答所提出的问题(正如您所看到的,您没有获得所需的输出)。输入向量
x
的解决方案给出了向量
a
,其中
a[i]=x中已排序(x)[i]的索引
,而所需的输出将是已排序(x)中x[i]的索引@Drecker OP希望按升序排序列表,其结果是
[-3,-1,1,4]
。如果从初始列表中获取这些值的索引,您将得到
[0,3,1,2]
。我认为OP应该澄清这一点。这个解决方案并没有回答被问到的问题(正如你们看到的,你们并没有得到想要的输出)。您对输入向量
x
的解决方案给出了向量
a
,其中
a[i]=x中已排序(x)[i]的索引
,而所需的输出将是已排序(x)中x[i]的索引@Drecker您说得对,谢谢您的发现。我相应地编辑了代码。出于某种原因,这似乎是一个很难彻底解决的小问题。