You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历嵌套列表时如何考虑层级?特定结构重组需求求解

问题描述

输入与预期输出

输入嵌套列表:

data = ['aaa', ['eee', ['ccc', 'zzz', ['fff']], 'yyy']]

预期输出及逻辑:

expected_output = [
    ['aaa', 'eee'], # eee是aaa后续紧邻子列表中的第一个非列表元素
    ['aaa', 'yyy'], # yyy是aaa后续紧邻子列表中的第二个非列表元素
    ['eee', 'ccc'], # ccc是eee后续紧邻子列表中的第一个非列表元素
    ['eee', 'zzz'], # zzz是eee后续紧邻子列表中的第二个非列表元素
    ['zzz', 'fff'], # fff是zzz后续紧邻子列表中的第一个非列表元素
]

核心逻辑:每个非列表元素,需与其后续紧邻子列表中的所有非列表元素组成配对,配对顺序固定(父元素在前,子元素在后),配对间顺序无要求。

错误尝试及输出

尝试的递归函数:

def my_func(item):
    output = []
    for i in item:
        if isinstance(i, list):
            yield i
        else:
            output.append([i, my_func(i)])

错误输出:

print(list(my_func(data)))

[['eee', ['ccc', 'zzz', ['fff']], 'yyy']]
解决方案

错误原因分析

原函数逻辑完全偏离需求:

  1. 仅yield遇到的子列表,未处理元素配对逻辑;
  2. 对非列表元素(如字符串)调用递归函数,不符合递归场景;
  3. 未实现“父元素与子列表中非列表元素配对”的核心逻辑。

正确实现代码

以下递归函数可满足需求:

def generate_pairs(lst):
    pairs = []
    current_elements = []
    for item in lst:
        if isinstance(item, list):
            # 用当前层级收集的非列表元素,与子列表中的非列表元素生成配对
            for parent in current_elements:
                for child in item:
                    if not isinstance(child, list):
                        pairs.append([parent, child])
            # 递归处理子列表,合并子列表生成的配对
            pairs.extend(generate_pairs(item))
        else:
            # 收集当前层级的非列表元素
            current_elements.append(item)
    return pairs

测试验证

调用函数并输出结果:

data = ['aaa', ['eee', ['ccc', 'zzz', ['fff']], 'yyy']]
result = generate_pairs(data)
print(result)

输出结果:

[['aaa', 'eee'], ['aaa', 'yyy'], ['eee', 'ccc'], ['eee', 'zzz'], ['zzz', 'fff']]

完全符合预期输出。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:25:58