You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何遍历嵌套列表并应用另一列表元素实现指定操作?

实现嵌套列表遍历并对应应用扁平列表元素的函数

这问题我熟!要实现这个magic_function,核心就是要按顺序消耗扁平列表的元素,同时保留嵌套列表的原有结构,我给你写个清晰的实现方案:

思路分析

  1. 把传入的扁平列表转换成迭代器,这样可以逐个获取下一个元素,不用手动维护索引,代码更简洁优雅。
  2. 递归遍历嵌套列表的每个元素:
    • 遇到子列表时,递归处理子列表,确保原有的嵌套层级被保留。
    • 遇到单个元素时,从迭代器中取下一个元素,和当前元素一起传入指定的操作函数计算结果。

代码实现

def operation(a, b): return a + b

def magic_function(func, flat_list, nested_list):
    """遍历nested_list并应用flat_list的下一个元素"""
    # 将扁平列表转为迭代器,用于逐个取出元素
    elem_iterator = iter(flat_list)
    
    def process_sub_list(sub_list):
        processed = []
        for item in sub_list:
            if isinstance(item, list):
                # 递归处理子列表,保持嵌套结构
                processed.append(process_sub_list(item))
            else:
                # 取出迭代器的下一个元素,执行指定操作
                processed.append(func(item, next(elem_iterator)))
        return processed
    
    return process_sub_list(nested_list)

# 测试你的示例
result = magic_function(operation, [0, 0, 0, 10, 10, 10], [[1, 2, 3], [1, 2, 3]])
print(result)  # 输出: [[1, 2, 3], [11, 12, 13]]

关键点说明

  • 迭代器的作用iter(flat_list)创建的迭代器会按顺序输出元素,刚好匹配嵌套列表展开后的元素顺序,完美对应你的需求。
  • 递归保留结构:递归函数process_sub_list会自动处理任意层级的嵌套列表(不止两层),比如如果传入[[[1], 2], 3]也能正常处理。
  • 异常处理(可选):如果扁平列表的元素数量和嵌套列表展开后的元素数量不匹配,会抛出StopIteration异常。如果需要兼容这种情况,可以改成next(elem_iterator, 0)(这里的0是默认值,可根据需求调整),避免程序崩溃。

内容的提问来源于stack exchange,提问作者Azsgy

火山引擎 最新活动