Python嵌套列表子列表补全至10元素:规避zip_longest转置问题
解决子列表补全至指定长度的简洁方法
你完全不用靠两次zip_longest转置来实现需求,直接对每个子列表单独补全就行,代码更简洁高效:
# 直接生成补全后的列表,每个子列表长度固定为10 filled_results = [sublist + [''] * (10 - len(sublist)) for sublist in master_results] # 验证结果:会输出74次10 for item in filled_results: print(len(item))
为什么之前的方法会出现转置?
zip_longest(*master_results)的核心逻辑是按位置聚合所有子列表的元素:把所有子列表的第1个元素凑成一个元组,第2个元素凑成另一个元组……因为最长的子列表是10个元素,最终会得到10个元组,每个元组包含74个元素(对应74个子列表的对应位置),这就是你看到的10×74结构。两次转置确实能还原,但属于没必要的绕路操作。
其他可选实现(用itertools工具)
如果偏好使用itertools生态,也可以用islice配合chain来完成补全,但列表推导式已经是最直观简洁的方案:
from itertools import islice, chain, repeat def fill_sublist(sublist, target_len=10, fillvalue=''): return list(islice(chain(sublist, repeat(fillvalue)), target_len)) filled_results = [fill_sublist(s) for s in master_results]
内容的提问来源于stack exchange,提问作者ShastaBiz
相关产品推荐
相关产品推荐

