如何遍历含列表的元组列表并按顺序分组元素(适配任意长度)
通用化处理元组列表生成连续元组
需求说明
给定格式为(前缀值, [任意长度子列表])的元组列表,需按以下规则生成连续元组:
- 前缀值与子列表第一个元素组成元组
- 子列表中相邻元素依次组成元组
- 收集所有生成的元组作为最终结果
输入示例:
lis = [(0, [75, 1, 30]), (1, [41, 49, 55]), (2, [28, 53, 45])]
预期输出:
[(0,75), (75, 1), (1, 30), (1, 41), (41,49), (49,55), (2,28), (28, 53), (53, 45)]
原有实现仅能处理子列表长度固定为3的情况,无法适配任意长度的子列表。
通用解法
利用zip()函数自动配对子列表的相邻元素,结合循环实现通用处理:
基础代码实现
# 示例输入 lis = [(0, [75, 1, 30]), (1, [41, 49, 55]), (2, [28, 53, 45])] result = [] for prefix, sublist in lis: # 添加前缀与子列表首元素的元组 result.append((prefix, sublist[0])) # zip(sublist, sublist[1:])自动配对子列表的相邻元素 result.extend(zip(sublist, sublist[1:])) print(result)
适配更长子列表的测试
对于输入:
test_lis = [(0, [82, 70, 79, 77, 42]), (1, [40, 61, 58, 66, 69]), (2, [80, 30, 12, 77, 9])]
执行上述代码后输出:
[(0, 82), (82, 70), (70, 79), (79, 77), (77, 42), (1, 40), (40, 61), (61, 58), (58, 66), (66, 69), (2, 80), (80, 30), (30, 12), (12, 77), (77, 9)]
空列表兼容处理
如果需要处理子列表为空的情况,可添加判断逻辑跳过无效项:
result = [] for prefix, sublist in lis: if not sublist: continue result.append((prefix, sublist[0])) result.extend(zip(sublist, sublist[1:]))
内容的提问来源于stack exchange,提问作者learner_from_scratch
相关产品推荐
相关产品推荐

