Python如何实现交替从任意数量不等长列表各取k个元素合并
Python 嵌套列表按规则合并实现方案
方案1:基于itertools标准库的简洁实现
完全贴合你描述的三步逻辑,符合Pythonic编码规范:
from itertools import zip_longest, chain k = 2 mylist = [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]] modified_mylist = list(chain.from_iterable( chunk for batch in zip_longest(*[[s[i:i+k] for i in range(0, len(s), k)] for s in mylist]) for chunk in batch if chunk is not None )) print(modified_mylist) # 输出:[1, 2, 5, 6, 8, 9, 12, 13, 3, 4, 7, 10, 11, 14, 15]
逻辑对应说明:
- 内层列表推导完成子列表的固定大小分块
zip_longest按序号对齐所有子列表的同批次块,自动填充空值适配不等长子列表- 遍历过滤空值后用
chain.from_iterable扁平化得到最终结果
方案2:无额外依赖的原生实现
不需要导入任何额外库,逻辑直观易维护:
k = 2 mylist = [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]] modified_mylist = [] # 计算所有子列表的最大分块数 max_chunk_cnt = max((len(s) + k - 1) // k for s in mylist) for chunk_idx in range(max_chunk_cnt): start = chunk_idx * k end = start + k # 依次取每个子列表当前批次的块 for sublist in mylist: modified_mylist.extend(sublist[start:end]) print(modified_mylist) # 输出:[1, 2, 5, 6, 8, 9, 12, 13, 3, 4, 7, 10, 11, 14, 15]
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

