如何将扁平列表按照指定嵌套列表的结构转换为对应嵌套列表?
实现方案
核心思路是将扁平列表转为迭代器,参考模板列表l2的子列表长度,依次从迭代器中取对应数量的元素拼装为嵌套结构:
# 示例输入(将字母转为字符串避免未定义报错,实际使用可替换为你的元素类型) l1 = ['a', 'b', 'c', 'd', 'e'] l2 = [['p', 'q'], ['r', 's', 't']] # 核心代码 iter_l1 = iter(l1) result = [[next(iter_l1) for _ in sub] for sub in l2] print(result) # 输出:[['a', 'b'], ['c', 'd', 'e']]
扩展:支持任意深度嵌套模板
如果你的l2嵌套层级不固定(比如存在3层及以上嵌套),可以用递归函数实现适配:
def reshape_flat_list(flat_list, template): flat_iter = iter(flat_list) def recursive_build(tmpl_node): # 如果当前模板节点是列表,递归处理子节点 if isinstance(tmpl_node, list): return [recursive_build(child) for child in tmpl_node] # 如果是普通元素,取扁平列表的下一个元素 return next(flat_iter) return recursive_build(template) # 多层嵌套测试 l1 = [1,2,3,4,5,6,7] l2 = [[1,2], [3, [4,5, [6,7]]]] print(reshape_flat_list(l1, l2)) # 输出:[[1, 2], [3, [4, 5, [6, 7]]]]
注意事项
- 请保证
l1的元素总个数和l2的非列表节点总个数一致,否则会抛出StopIteration异常 - 迭代器本身是消耗型的,多次使用需要重新从
l1生成新的迭代器
内容的提问来源于stack exchange,提问作者NAS_2339
相关产品推荐
相关产品推荐

