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

如何根据另一列表的排序结果同步调整列表顺序

同步排序两个列表(以第一个列表为排序依据)

核心思路是基于第一个列表的排序规则,确定元素的位置变化,再同步调整第二个列表的元素位置。以下是几种主流编程语言的实现方案:

Python 实现

方案1:配对元素后排序再拆分

这种方式会生成新的排序后的列表,适合不需要原地修改的场景:

list1 = [1, 3, 2]
list2 = [1, 2, 3]

# 将两个列表的对应元素配对,按list1的元素排序
paired_items = sorted(zip(list1, list2), key=lambda x: x[0])
# 拆分回两个独立列表
sorted_list1, sorted_list2 = zip(*paired_items)

# 若需要列表类型(zip返回元组),可转换为list
sorted_list1 = list(sorted_list1)
sorted_list2 = list(sorted_list2)

print(sorted_list1)  # 输出: [1, 2, 3]
print(sorted_list2)  # 输出: [1, 3, 2]

方案2:原地修改原列表

如果需要直接修改原列表而非生成新列表,可以通过排序索引的方式实现:

list1 = [1, 3, 2]
list2 = [1, 2, 3]

# 获取按list1元素排序后的索引顺序
sorted_indices = sorted(range(len(list1)), key=lambda i: list1[i])

# 原地更新两个列表
list1[:] = [list1[i] for i in sorted_indices]
list2[:] = [list2[i] for i in sorted_indices]

print(list1)  # 输出: [1, 2, 3]
print(list2)  # 输出: [1, 3, 2]

JavaScript 实现

let list1 = [1, 3, 2];
let list2 = [1, 2, 3];

// 生成索引数组并按list1的元素排序
const sortedIndices = list1.map((_, index) => index).sort((a, b) => list1[a] - list1[b]);

// 根据排序后的索引生成新列表
const sortedList1 = sortedIndices.map(idx => list1[idx]);
const sortedList2 = sortedIndices.map(idx => list2[idx]);

console.log(sortedList1); // 输出: [1, 2, 3]
console.log(sortedList2); // 输出: [1, 3, 2]

核心逻辑说明

不管使用哪种语言,本质都是先确定第一个列表排序后的元素位置索引,再用这个索引顺序重新排列两个列表;或者直接将两个列表的对应元素配对,按第一个列表的元素排序后拆分,两种方式都能实现同步调整的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:55:18