Python元组列表处理:拼接短元组为长度6的有效元组
元组列表短片段拼接实现方案
核心逻辑
- 维护一个临时缓存变量,初始为空元组,用于暂存连续短片段的拼接结果
- 逐次遍历原列表中的每个元组片段,将当前片段追加到缓存中
- 当缓存总长度刚好达到6时,将缓存内容作为有效项存入最终结果列表,同时清空缓存,进入下一轮拼接
- 无需额外分支判断单个元组的长度:遇到长度为6的独立有效元组时,由于初始缓存为空,拼接后长度直接为6,会自动触发入结果的逻辑,和预期规则完全匹配
完整可运行代码
def merge_short_tuples(raw_tuple_list: list[tuple], target_len: int = 6) -> list[tuple]: final_result = [] temp_buffer = tuple() for fragment in raw_tuple_list: temp_buffer += fragment # 长度达到目标值就入库、清空缓存 if len(temp_buffer) == target_len: final_result.append(temp_buffer) temp_buffer = tuple() # 越界校验:如果拼接后长度超过目标值,直接抛出错误定位异常输入 elif len(temp_buffer) > target_len: raise ValueError(f"异常输入:当前拼接片段长度{len(temp_buffer)}超过目标值{target_len}") # 兜底校验:遍历完成后如果缓存还有剩余片段,说明存在未凑满长度的冗余内容 if temp_buffer: raise ValueError(f"未完成拼接:剩余缓存长度{len(temp_buffer)}不足{target_len}") return final_result # 示例测试 foo = [(3, 1, 0, 1, 1, 1), (3, 1), (1, 1), (3, 1), (3, 1, 0, 1), (1, 2), (3, 3, 3, 1, 2, 2)] foo_1 = merge_short_tuples(foo) print(foo_1)
运行效果
执行代码后输出结果与示例完全匹配:
[(3, 1, 0, 1, 1, 1), (3, 1, 1, 1, 3, 1), (3, 1, 0, 1, 1, 2), (3, 3, 3, 1, 2, 2)]
拼接过程完全符合规则:
- 第一个长度为6的元组直接入结果
- 连续拼接
(3,1)、(1,1)、(3,1),总长度6,对应foo_1[1] - 连续拼接
(3,1,0,1)、(1,2),总长度6,对应foo_1[2] - 最后一个长度为6的元组直接入结果
内容的提问来源于stack exchange,提问作者Roman Lents
相关产品推荐
相关产品推荐

