You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何生成列表的排序索引以修改其他列表?

生成排序索引的几种Python实现方式

嗨!第一次提问完全不用客气~针对你要生成数值列表排序索引的需求,Python里有几种简洁又实用的实现方法,我给你详细说明下:

方法一:用sorted() + enumerate()(纯Python,无需额外库)

这是最基础也最直观的方法,借助enumerate()同时获取元素的索引和对应值,再通过sorted()按数值排序,最后提取索引即可:

values = [-3, 1, 4, -1]
# 生成升序排序的索引列表
sorted_indices = [idx for idx, val in sorted(enumerate(values), key=lambda x: x[1])]
print(sorted_indices)  # 输出: [0, 3, 1, 2]

解释:

  • enumerate(values)会生成类似(0, -3), (1, 1), (2, 4), (3, -1)的元组,每个元组包含元素的索引和对应数值;
  • sorted(..., key=lambda x: x[1])指定按元组的第二个元素(也就是数值本身)进行升序排序;
  • 最后通过列表推导式,把排序后的元组里的索引提取出来,就得到了想要的排序索引列表。

如果需要降序的索引列表,只需要给sorted()加上reverse=True参数:

sorted_indices_desc = [idx for idx, val in sorted(enumerate(values), key=lambda x: x[1], reverse=True)]
print(sorted_indices_desc)  # 输出: [2, 1, 3, 0]

方法二:用numpy.argsort()(适合大数据量场景)

如果你的项目已经在使用NumPy库,那这个方法会更高效,尤其是处理大型列表时:

import numpy as np

values = [-3, 1, 4, -1]
sorted_indices = np.argsort(values).tolist()
print(sorted_indices)  # 输出: [0, 3, 1, 2]

np.argsort()直接返回升序排序的索引数组,调用.tolist()就能转成普通Python列表。如果要降序索引,只需要对结果做逆序切片:

sorted_indices_desc = np.argsort(values)[::-1].tolist()
print(sorted_indices_desc)  # 输出: [2, 1, 3, 0]

💡 小提醒:你例子里写的升序索引[0,2,3,1]应该是笔误哦,正确的升序索引对应排序后的数值[-3, -1, 1, 4],对应的原索引就是[0,3,1,2],上面的代码运行后就能得到这个结果。


内容的提问来源于stack exchange,提问作者Brian Korsedal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:27:05