python意外索引输出了一个int列表



很抱歉,我的问题可能不够清楚,让很多人感到困惑,它描述得很清楚,这里有解决方案:https://github.com/numpy/numpy/issues/8757

给定列表a为:

a = [9, 3, 5]

我需要相应的索引如下:

a_indices = [2, 0, 1]

但是当我使用中的方法时,如何在对列表排序后保存原始索引,输出为:

a_indices = [1, 2, 0]

我需要的与此类似:

>>> a = [4, 2, 3, 1, 4]
>>> b = sorted(enumerate(a), key=lambda i: i[1])
[(3, 1), (1, 2), (2, 3), (0, 4), (4, 4)]

上面的输出是正确的,但当我按照下面的方式分配a时,输出是意外的:

>>> a = [9, 3, 5]
>>> b = sorted(enumerate(a), key=lambda i: i[1])
>>> b
[(1, 3), (2, 5), (0, 9)]

预期输出为:

[(2, 3), (0, 5), (1, 9)]

我对排序功能感到困惑,有人能帮我解释一下吗?

有使用的解决方案

np.argsort(np.argsort(a))

参考:https://github.com/numpy/numpy/issues/8757

您可以在sorted:上使用enumerate

a = [9, 3, 5]
temp = {x: i for i, x in enumerate(sorted(a))}
b = [temp[x] for x in a]
print(b)

输出:

[2, 0, 1]

如果您的列表是[9, 3, 5],那么3的索引是1,而不是2;5具有索引2,而不是0;9的索引为0,而不是1。请记住,列表的第一个索引是0,然后第二个索引是1,等等。因此,对于排序列表[3, 5, 9],原始索引是[1, 2, 0],正如输出正确显示的那样。CCD_ 6实际上是列表CCD_

好了,我有你的问题了。你能做的是:

a = [9,3,5] 
b = sorted(enumerate(a), key=lambda i: i[1])    
b = [x for x in enumerate(b)]
b = sorted(b, key=lambda i: i[1][0])
ans = [x[0] for x in b]

输出为[2,0.1]

Hey基本上枚举生成(index,value(的元组。所以如果你运行

a=[9,3,5]
print(list(enumerate(a)))

它生成

[(0, 9), (1, 3), (2, 5)]

指示9位于第一位置,3位于第二位置,依此类推(Python具有基于0的索引(。之后是自定义排序

key=lambda i: i[1]

表示使用元组中的第二个元素对列表进行排序,该列表只不过是中的数字

现在我的问题是,python给出的输出根据排序是正确的,但你的预期输出并没有说明为什么会是这样,因为你似乎并不只是想排序。因为[2,0,1]不会用于基于0的索引或基于1的索引。

我不知道为什么您在示例中期望不同的结果:

>>> list(enumerate(a))
[(0, 9), (1, 3), (2, 5)]

返回3个元组,您将根据元组中的第二个元素对其进行排序。换句话说,元组(2, 3)(0, 5)(1, 9)不在原始枚举中,因此在对枚举进行排序后无法找到它们。

[(1, 3), (2, 5), (0, 9)]是正确的结果,即3是最低值,原始列表中的索引是1等。

最新更新