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

如何将Python中按长度逆序排序后的列表恢复为初始顺序?

恢复已排序列表为原始顺序的方法

首先注意到你提供的原始列表list1存在语法错误,缺少逗号,正确定义应为:

list1 = ["Hi", "Whats up this Morning", "Hello", "Good Morning"]

下面分两种场景给出解决方案:

场景1:仍保留原始列表list1

如果原始列表还在,有两种便捷方式恢复顺序:

方式1:直接复用原始列表

既然list1本身就是目标顺序,直接复制使用即可:

original_order_list = list1.copy()  # 用copy避免后续修改影响原列表

方式2:基于原始索引排序new_list

如果必须从new_list出发恢复,先创建元素到原始索引的映射字典,再以此索引为排序键对new_list排序:

# 建立元素与原始索引的映射
index_map = {item: idx for idx, item in enumerate(list1)}
# 按原始索引排序new_list
restored_list = sorted(new_list, key=lambda x: index_map[x])

print(restored_list)
# 输出: ["Hi", "Whats up this Morning", "Hello", "Good Morning"]

场景2:已丢失原始列表list1

如果没有保留原始列表,无法直接恢复顺序——因为sorted()仅返回排序后的元素,不会记录原始位置信息。

要避免这种情况,建议在第一次排序时就保留原始索引,后续可通过索引恢复:

# 排序时绑定元素与原始索引
sorted_with_index = sorted(enumerate(list1), key=lambda x: len(x[1]), reverse=True)
new_list = [item for idx, item in sorted_with_index]

# 恢复原始顺序:按原始索引排序
restored_list = sorted(sorted_with_index, key=lambda x: x[0])
restored_list = [item for idx, item in restored_list]

print(restored_list)
# 输出: ["Hi", "Whats up this Morning", "Hello", "Good Morning"]

注:如果列表存在重复元素,上述索引映射方法会失效(字典键唯一),此时需要记录元素的所有出现位置再按顺序匹配。但你的示例中元素均唯一,上述方法完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:16:13