遍历嵌套列表时如何考虑层级?特定结构重组需求求解
问题描述
输入与预期输出
输入嵌套列表:
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']]
解决方案
错误原因分析
原函数逻辑完全偏离需求:
- 仅
yield遇到的子列表,未处理元素配对逻辑; - 对非列表元素(如字符串)调用递归函数,不符合递归场景;
- 未实现“父元素与子列表中非列表元素配对”的核心逻辑。
正确实现代码
以下递归函数可满足需求:
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
相关产品推荐
相关产品推荐

