Python列表匹配追加实现 源列表新建列表代码问题排查
问题根因
你的代码存在3个核心逻辑错误:
- 初始
models结构错误:第一阶段循环仅将model名称作为单独字符串存入一维列表,没有构造[['model1'], ['model2'], ['model3']]的嵌套结构,后续插入操作无法对应到单个model的子项中。 - 插入位置逻辑错误:
models.insert(1, element)操作是针对整个大列表的固定索引1位置插入元素,三次匹配成功就会把三个值都堆在大列表的第二个位置,完全不是往每个子项的索引1位置插值。 - 匹配关系缺失:遍历元素时没有绑定当前匹配值所属的model,只要元素在
list2里就执行插入,既不校验归属,也没在找到目标值后跳出当前子项的遍历,必然会出现重复插入、顺序错乱的问题。
修正方案
调整初始models的构造逻辑生成嵌套列表,遍历list1时同步跟踪索引对应到models的子项,找到匹配值后往对应子项的索引1位置插入,找到即终止当前子项的遍历避免重复插入:
list1 = [['model1', 'yes', 'TT42'], ['model2', 'yes', 'GG50'], ['model3', 'no', 'BB12']] models = [] for item in list1: # 构造嵌套子列表,每个子项首元素为model名称 if [item[0]] not in models: models.append([item[0]]) # 转集合提升成员判断效率,数据量大时效果明显 target_set = set(['TT42', 'GG50', 'BB12']) # 用enumerate同步获取当前子项的索引,对应models里的子列表位置 for idx, item in enumerate(list1): for element in item: if element in target_set: # 往对应子列表的索引1位置插入匹配值 models[idx].insert(1, element) # 找到即跳出,避免同子项内多匹配值重复插入 break print(models)
运行后输出结果完全符合预期:[['model1', 'TT42'], ['model2', 'GG50'], ['model3', 'BB12']]
内容的提问来源于stack exchange,提问作者Chaotic.Python
相关产品推荐
相关产品推荐

