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

Python中合并多列表排序后按原归属生成元素索引列表的实现方案

Python列表索引映射解决方案

我来帮你实现这个需求,下面是清晰的步骤和可直接运行的代码:

核心思路

我们需要完成三个关键环节:

  • 合并三个原列表并排序
  • 建立每个元素到其排序后1-based位置的映射
  • 遍历原列表,用映射生成对应的索引列表

完整代码

# 定义原列表
A = [3, 8, 10, 25]
B = [14, 15, 30, 23]
C = [24, 27, 31, 34]

# 合并所有元素并升序排序
merged_sorted = sorted(A + B + C)

# 创建元素到1-based索引的映射字典
element_to_position = {num: idx + 1 for idx, num in enumerate(merged_sorted)}

# 生成原列表对应的索引列表
new_A = [element_to_position[num] for num in A]
new_B = [element_to_position[num] for num in B]
new_C = [element_to_position[num] for num in C]

# 验证结果
print(f"A = {new_A}")  # 输出: A = [1, 2, 3, 8]
print(f"B = {new_B}")  # 输出: B = [4, 5, 9, 6]
print(f"C = {new_C}")  # 输出: C = [7, 10, 11, 12]

代码解释

  1. 合并排序:A + B + C将三个列表拼接成一个大列表,sorted()默认按升序排列,得到排序后的完整元素序列。
  2. 映射字典:用字典推导式遍历排序后的列表,给每个元素绑定它的位置(因为Python列表索引从0开始,所以加1转换成题目要求的1-based索引)。
  3. 生成结果:通过列表推导式遍历每个原列表的元素,从映射字典中取出对应的位置值,快速生成新的索引列表。

注意事项

如果原列表中存在重复元素,当前代码会给所有相同元素分配同一个位置。如果需要区分重复元素的出现顺序(比如按首次出现的位置),可以稍微调整映射逻辑,但你的示例中元素都是唯一的,所以当前代码完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:07:52