Python循环中if判断后列表追加仅存最后元素的问题修复
嵌套列表去冗余转换问题修复
问题背景
有一个多层嵌套的列表,需要转换为结构相似但去除多余嵌套的目标列表:
原始输入列表:
list_data_type = [ [['void1']], [['uint8']], [['uint8'], ['uint32']], [['void2']], [['void3']], [['void4']], [['void5']] ]
期望的目标输出:
list_data_converted = [ ['void1'], ['uint8'], ['uint8', 'uint32'], ['void2'], ['void3'], ['void4'], ['void5'] ]
原代码在循环结合判断追加元素时,最终仅保留最后一个元素['void5'],需要修复。
原代码问题点
- 未初始化存储最终结果的列表,处理后的元素没有被持续保存
- 依赖字符串替换解析列表,逻辑复杂且容易出现意外错误
- 分支中每次循环都会重新初始化临时列表,导致之前的处理结果丢失
- 使用
list_data_type.index(element)获取索引,遇到重复元素时会返回错误位置
修复方案
方案一:简洁的列表推导式
直接通过嵌套推导完成扁平化处理,代码简洁高效:
list_data_type = [ [['void1']], [['uint8']], [['uint8'], ['uint32']], [['void2']], [['void3']], [['void4']], [['void5']] ] list_data_converted = [ [inner[0] for inner in sublist] for sublist in list_data_type ] print(list_data_converted)
方案二:直观的循环实现
如果需要更清晰的逻辑展示,用普通循环分步处理:
list_data_type = [ [['void1']], [['uint8']], [['uint8'], ['uint32']], [['void2']], [['void3']], [['void4']], [['void5']] ] list_data_converted = [] for sublist in list_data_type: temp = [] # 遍历每个内部的单元素列表,提取出值 for inner_item in sublist: temp.append(inner_item[0]) list_data_converted.append(temp) print(list_data_converted)
两种方案都能准确得到目标输出,核心逻辑是直接提取最内层列表的唯一元素,避免了复杂的字符串操作,同时确保所有处理后的元素都被追加到结果列表中。
内容的提问来源于stack exchange,提问作者Redal_Snake
相关产品推荐
相关产品推荐

