遍历两个列表匹配顺序 提取out_list中不符合in_list排序的错位元素
代码调整方案
原有代码问题
原有逻辑仅判断当前遍历的out_list元素是否匹配in_list的首个元素,未匹配直接加入错误列表,未考虑后续会匹配成功的正确元素,也没有校验元素出现顺序的先后,因此输出结果不符合预期。
调整后代码
假设两个列表的元素均唯一,我们可以先记录in_list中每个元素的索引位置,再对比out_list中元素的位置,位置提前的元素即为顺序不符的元素:
in_list = [1,2,3,4] out_list = [1,3,2,4] # 记录in_list各元素的对应索引 in_index = {val: idx for idx, val in enumerate(in_list)} temp_list = [] for out_idx, val in enumerate(out_list): # 元素在out_list中出现的位置早于in_list中的位置,即为顺序不符 if out_idx < in_index[val]: temp_list.append(val) # 按要求清空in_list得到空输出 in_list.clear() print('in', in_list) print('out', temp_list)
运行结果
in [] out [3]
完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者Stack Vau
相关产品推荐
相关产品推荐

