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]
代码解释
- 合并排序:
A + B + C将三个列表拼接成一个大列表,sorted()默认按升序排列,得到排序后的完整元素序列。 - 映射字典:用字典推导式遍历排序后的列表,给每个元素绑定它的位置(因为Python列表索引从0开始,所以加1转换成题目要求的1-based索引)。
- 生成结果:通过列表推导式遍历每个原列表的元素,从映射字典中取出对应的位置值,快速生成新的索引列表。
注意事项
如果原列表中存在重复元素,当前代码会给所有相同元素分配同一个位置。如果需要区分重复元素的出现顺序(比如按首次出现的位置),可以稍微调整映射逻辑,但你的示例中元素都是唯一的,所以当前代码完全满足需求。
内容的提问来源于stack exchange,提问作者Robbods
相关产品推荐
相关产品推荐

