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

Python2.7下多元组子列表按交替索引合并的实现方案求助

实现思路与Python2.7代码方案

我来帮你梳理这个问题的实现思路,完全基于Python2.7标准库来搞定:

核心思路拆解

  1. 对齐子列表元素:首先要把所有子列表按位置对齐,短的子列表在超出自身长度的位置用None填充,这样我们能保证每个结果元组对应所有子列表的同一位置元素(或None)。
  2. 按规则拼接元组:根据子列表的数量n,采用不同的拼接逻辑:
    • 当n=2时,每个结果元组格式为(x1, y1, x2),第二个子列表只取x值(没有则补None)
    • 当n>2时,每个结果元组按顺序拼接每个子列表元素的x和y,元素不存在则x和y都用None代替

具体代码实现

import itertools

def merge_tuples(input_sublists):
    sublist_count = len(input_sublists)
    # 题目要求最小输入是2个子列表,这里加个异常判断避免非法输入
    if sublist_count < 2:
        raise ValueError("Input must have at least 2 sublists")
    
    # 用itertools.izip_longest对齐所有子列表,缺省位置补None
    aligned_items = itertools.izip_longest(*input_sublists)
    
    merged_result = []
    for position_items in aligned_items:
        current_tuple = []
        for idx, item in enumerate(position_items):
            # 处理当前子列表在该位置的元素,不存在则x、y都为None
            x, y = item if item is not None else (None, None)
            if sublist_count == 2 and idx == 1:
                # 双列情况:第二个子列表只添加x值
                current_tuple.append(x)
            else:
                # 多列情况:添加当前元素的x和y
                current_tuple.append(x)
                current_tuple.append(y)
        # 把列表转为元组,加入结果集
        merged_result.append(tuple(current_tuple))
    
    return merged_result

测试示例

双列输入测试

a = [[(15,1),(14,2),(13,3),(12,4),(11,5),(10,6),(9,7),(8,8),(7,9),(6,10),(5,11),(4,12),(3,13),(2,14),(1,15)], [(7,1),(6,2),(5,3),(4,4),(3,5),(2,6),(1,7)]]
print(merge_tuples(a))

输出片段:

[(15, 1, 7), (14, 2, 6), (13, 3, 5), (12, 4, 4), (11, 5, 3), (10, 6, 2), (9, 7, 1), (8, 8, None), (7, 9, None), ..., (1, 15, None)]

三列输入测试

a = [[(7,1),(6,2),(5,3),(4,4),(3,5),(2,6),(1,7)], [(6,1),(5,2),(4,3),(3,4),(2,5),(1,6)], [(10,1),(9,2),(8,3),(7,4),(6,5),(5,6),(4,7),(3,8),(2,9),(1,10)]]
print(merge_tuples(a))

输出片段:

[(7, 1, 6, 1, 10, 1), (6, 2, 5, 2, 9, 2), (5, 3, 4, 3, 8, 3), (4, 4, 3, 4, 7, 4), (3, 5, 2, 5, 6, 5), (2, 6, 1, 6, 5, 6), (1, 7, None, None, 4, 7), (None, None, None, None, 3, 8), ..., (None, None, None, None, 1, 10)]

关键细节说明

  • itertools.izip_longest是Python2.7里实现列表对齐的核心工具,它会自动将所有输入的子列表扩展到最长子列表的长度,缺省位置补None,完美适配题目中“子列表元组数量可不同”的要求,而且不需要硬编码任何长度上限。
  • 代码里对n=2的特殊情况做了单独处理,严格遵循题目要求的输出格式;多列情况则统一拼接每个子元素的x和y,逻辑清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:03:24