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

Python中按最后子列表排序同步调整所有子列表对应索引

解决方案

核心思路是先确定最后一个子列表升序排序后的索引顺序,再用这个索引顺序重新排列所有子列表的元素。

步骤分解

  1. 提取最后一个子列表,生成它的排序索引
  2. 遍历所有子列表,按排序索引重新提取元素

完整代码示例

original = [[6.0, 3.0, 16.0, 3.0], [3.0, 2.0, 5.0, 7.0], [4.0, 3.0, 2.0, 1.0]]

# 获取最后一个子列表的排序索引:按元素值升序,记录对应的原始索引
last_sub = original[-1]
sorted_indices = sorted(range(len(last_sub)), key=lambda i: last_sub[i])

# 按索引重新排列每个子列表
result = [[sub[i] for i in sorted_indices] for sub in original]

print(result)
# 输出:[[3.0, 16.0, 3.0, 6.0], [7.0, 5.0, 2.0, 3.0], [1.0, 2.0, 3.0, 4.0]]

关键细节说明

  • sorted(range(len(last_sub)), key=lambda i: last_sub[i]):这行代码生成的是原始索引的排序结果,排序依据是对应位置的元素值。比如原最后子列表[4.0,3.0,2.0,1.0],排序后元素顺序是1.0,2.0,3.0,4.0,对应的原始索引就是3,2,1,0。
  • 列表推导式[[sub[i] for i in sorted_indices] for sub in original]:遍历每个子列表,按排序后的索引依次取出元素,实现所有子列表的同步重排。

为什么直接用zip可能没成功?

如果直接用zip(*original)转置后排序,会把每一列作为整体排序,这和需求不符——我们需要的是基于最后一列的排序结果,调整所有列的顺序,而不是对列本身排序。上面的方法精准抓住了“索引顺序”这个核心,就能实现预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:22:07