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

如何在Python中合并三个嵌套列表且不增加子列表数量?

Python体育公平组队的嵌套列表特殊合并实现

需求说明

开发体育活动「公平组队」程序时,需要按以下规则合并嵌套列表:

  • 将某列表的最短子列表与另一列表的最长子列表合并
  • 最终新嵌套列表的每个子列表由原各列表的一个子列表组成
  • 所有新子列表的长度需大致相同,保证组队公平性

示例

输入:

list1 = [["Peter","Anne"],["Maria"],["Max"]]
list2 = [["John","Jacob"],["Grace"],["Clara"]]

预期输出:

final_list = [["Peter","Anne","Grace"],["Maria","John","Jacob"],["Max","Clara"]]

问题分析

直接使用list.extend()或list.append()无法满足需求:

  • extend仅将一个列表的元素追加到另一个列表末尾,不会跨列表合并子列表
  • append会将整个子列表作为单个元素添加,无法实现子列表内容的合并

解决方案

通过长短子列表配对排序的方式实现合并,核心思路是让最长子列表与最短子列表合并,平衡最终每个组队的人数:

def fair_team_merge(*lists):
    # 暂实现两个列表的合并逻辑,三个列表可扩展配对规则
    if len(lists) != 2:
        raise ValueError("当前版本仅支持两个嵌套列表的合并")
    
    list_a, list_b = lists
    # 按子列表长度降序排序第一个列表(优先取最长子列表)
    sorted_a = sorted(list_a, key=lambda x: len(x), reverse=True)
    # 按子列表长度升序排序第二个列表(优先取最短子列表)
    sorted_b = sorted(list_b, key=lambda x: len(x))
    
    # 对应索引合并子列表
    return [a + b for a, b in zip(sorted_a, sorted_b)]

# 测试示例
list1 = [["Peter","Anne"],["Maria"],["Max"]]
list2 = [["John","Jacob"],["Grace"],["Clara"]]
final_list = fair_team_merge(list1, list2)
print(final_list)

代码说明

  1. 对两个输入列表分别排序:一个按子列表长度降序,一个按升序
  2. 将排序后的子列表按索引一一合并,实现最长子列表与最短子列表配对
  3. 合并后的每个子列表总长度差最小,符合公平组队的要求

扩展到三个列表

如果需要合并三个嵌套列表,可以调整排序规则,例如:

  • 列表1按长度降序排序
  • 列表2按长度升序排序
  • 列表3按长度自然排序
  • 再按索引一一合并,或通过计算总长度方差来优化配对逻辑,确保最终各子列表长度尽可能均匀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:41:33