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

如何基于首个列表列表的排序规则同步排序多个Python列表列表?

按基准嵌套列表同步排序多组嵌套列表的Python实现

问题背景

现有多组结构一致的嵌套列表,示例如下:

days = [[5,2,7],[5,2]]
km = [[2,3,4],[4,3]]
time = [[30,10,20],[15,25]]

需要以days中每个子列表的排序规则为基准,同步对km、time(及其他约10个同结构列表)的对应子列表排序,预期输出:

days = [[2,5,7],[2,5]]
km = [[3,2,4],[3,4]]
time = [[10,30,20],[25,15]]

单独对每个列表使用list(map(sorted, days))无法实现同步排序,需批量完成同步操作。

解决方案

核心逻辑是基于基准列表子列表的排序索引,重排所有对应子列表的元素,通过zip打包对应子列表、生成排序索引、按索引重排三个步骤实现:

实现代码

# 原始数据
days = [[5,2,7],[5,2]]
km = [[2,3,4],[4,3]]
time = [[30,10,20],[15,25]]

def sync_sort(base_list, *other_lists):
    sorted_groups = []
    # 遍历每一组对应位置的子列表
    for base_sub, *others_sub in zip(base_list, *other_lists):
        # 生成基准子列表排序后的索引顺序
        sorted_indices = sorted(range(len(base_sub)), key=lambda idx: base_sub[idx])
        # 按索引顺序重排当前组的所有子列表
        sorted_base = [base_sub[idx] for idx in sorted_indices]
        sorted_others = [[sub[idx] for idx in sorted_indices] for sub in others_sub]
        sorted_groups.append((sorted_base, *sorted_others))
    # 将排序后的组拆分回独立列表
    sorted_results = tuple(map(list, zip(*sorted_groups)))
    return sorted_results

# 执行同步排序
sorted_days, sorted_km, sorted_time = sync_sort(days, km, time)

# 输出结果
print("days =", sorted_days)
print("km =", sorted_km)
print("time =", sorted_time)

关键步骤说明

  1. 打包子列表组:zip(base_list, *other_lists)将所有列表中同一位置的子列表打包成元组,比如第一组为([5,2,7], [2,3,4], [30,10,20])。
  2. 生成排序索引:sorted(range(len(base_sub)), key=lambda idx: base_sub[idx])得到基准子列表排序后的元素索引,比如对[5,2,7],索引顺序为[1,0,2](对应元素2、5、7)。
  3. 按索引重排:通过列表推导式,用上述索引重新排列当前组内所有子列表的元素,保证排序规则和基准子列表完全一致。
  4. 拆分结果:zip(*sorted_groups)将排序后的子列表组拆分回独立的嵌套列表,最后转换为列表类型(map(list, ...)解决zip返回元组的问题)。

适配多列表场景

如果有10个同结构列表,只需将所有列表作为参数传入sync_sort即可:

# 假设列表为list1, list2, ..., list10
sorted_list1, sorted_list2, ..., sorted_list10 = sync_sort(list1, list2, list3, ..., list10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:01:51