如何遍历嵌套列表并按条件用迭代历史更新子列表?
解决嵌套列表迭代更新问题
首先我们需要维护两个关键的历史数据:
- 前一次迭代中第一个子列表的最后一个元素(用于处理
ella NO DATA的情况) - 所有已迭代过的第一个子列表中的名字集合(用于去重,处理
ellas NO DATA的情况)
以下是完整的实现代码:
# 示例嵌套列表(可替换为你的实际数据) nested_list = [ [["Alice", "2023"], ["Bob", "2022"]], [["ella NO DATA"], ["Charlie", "2021"]], [["ellas NO DATA"], ["Dave", "2020"]], [["ella NO DATA"], ["Eve", "2019"]] ] # 初始化历史数据 prev_last_name = None all_names = set() for idx, i_list in enumerate(nested_list): # 先记录有效数据到历史,避免NO DATA污染记录 first_sublist = i_list[0] if not ('ella NO DATA' in first_sublist or 'ellas NO DATA' in first_sublist): prev_last_name = first_sublist[-1] all_names.update(first_sublist) # 当不是第一个元素时执行替换逻辑 if idx > 0: if 'ella NO DATA' in i_list[0]: i_list[0] = [prev_last_name] elif 'ellas NO DATA' in i_list[0]: i_list[0] = list(all_names) # 输出处理后的结果 print(f"处理后的第{idx+1}个列表: {i_list}")
关键逻辑说明
- 历史数据维护:优先记录当前迭代的有效数据,确保
prev_last_name和all_names只存储正常的内容,不会被NO DATA条目干扰。 ella NO DATA替换:直接引用上一次有效迭代中第一个子列表的末尾元素,若需要兼容无前置有效数据的场景,可自行添加默认值逻辑。ellas NO DATA替换:利用集合自动去重的特性,收集所有历史有效名字,替换时转成列表格式即可。- 执行顺序:先更新历史数据再处理替换,保证替换用的历史数据都是前置迭代的有效内容。
示例输出
运行上述代码会得到:
处理后的第1个列表: [["Alice", "2023"], ["Bob", "2022"]] 处理后的第2个列表: [["2023"], ["Charlie", "2021"]] 处理后的第3个列表: [["Alice", "2023"], ["Dave", "2020"]] 处理后的第4个列表: [["2023"], ["Eve", "2019"]]
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

