如何在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按长度自然排序
- 再按索引一一合并,或通过计算总长度方差来优化配对逻辑,确保最终各子列表长度尽可能均匀
内容的提问来源于stack exchange,提问作者Chewie2k
相关产品推荐
相关产品推荐

