如何合并两个列表返回由元组组成的新列表?需符合指定规则
问题分析
- 原生
zip()函数仅会迭代到两个列表中更短的那个结束,会丢弃长列表超出的部分,不符合你需要补全到相同长度的要求 - 原代码逻辑是将配对后的元组元素展开追加到列表,最终返回的是扁平的一维列表,和要求的「元组构成的新列表」结构不符
- 没有处理空列表的边界判断逻辑
修正后代码
def merge(a, b): # 任意列表为空直接返回空 if not a or not b: return [] max_len = max(len(a), len(b)) res = [] for i in range(max_len): # 取a的对应位置元素,超出索引就取最后一个 a_item = a[i] if i < len(a) else a[-1] # 同理取b的元素 b_item = b[i] if i < len(b) else b[-1] res.append((a_item, b_item)) return res
测试验证
运行示例即可得到符合要求的结果:
merge([0, 1, 2], [5, 6, 7])返回[(0, 5), (1, 6), (2, 7)]merge([2, 1, 0], [5, 6])返回[(2, 5), (1, 6), (0, 6)]merge([], [2, 3])返回[]print(merge([0, 1, 2], [5, 6]))输出为[(0, 5), (1, 6), (2, 6)]
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

