Python如何实现嵌套列表各子列表独立去除重复元素
嵌套列表按子列表独立去重实现
问题场景
对包含嵌套子列表的列表执行去重操作时,现有脚本去重作用范围不符合预期,嵌套列表最终输出和目标结果存在偏差。
原测试代码
# initializing list result = [] hasil = [] sam_list = [[11, 17, 11, 13, 13, 15, 16, 11], [4, 7, 11, 34, 4, 7, 11, 6], [1, 6, 11, 13, 13, 4, 1, 6]] for item in sam_list: print("START") for x in item: print(x, result) if x not in result: print("NOT IN") result.append(x) hasil.append(result)
实际运行输出
[[11, 17, 13, 15, 16, 4, 7, 34, 6, 1], [11, 17, 13, 15, 16, 4, 7, 34, 6, 1], [11, 17, 13, 15, 16, 4, 7, 34, 6, 1]]
期望输出
[[11, 17, 13, 15, 16], [4, 7, 11, 34, 6], [1, 6, 11, 13, 4]]
错误原因
原代码把去重缓存列表result定义在子列表循环的外层,处理所有子列表时共用同一个缓存空间,且每次追加到最终结果hasil的是result的引用而非独立副本,最终所有子列表项都指向同一个累计了全部元素的列表,无法实现子列表维度的独立去重。
修正方法
处理每个子列表前,单独初始化当前子列表专属的去重缓存,遍历完当前子列表的所有元素、完成单列表去重后,再将独立的去重结果追加到最终结果列表中,即可实现每个子列表独立去重、保留元素首次出现顺序的效果。
修正后代码
hasil = [] sam_list = [[11, 17, 11, 13, 13, 15, 16, 11], [4, 7, 11, 34, 4, 7, 11, 6], [1, 6, 11, 13, 13, 4, 1, 6]] for item in sam_list: # 每个子列表单独初始化去重缓存 current_result = [] for x in item: if x not in current_result: current_result.append(x) hasil.append(current_result) print(hasil)
运行上述代码即可得到符合预期的输出结果。
内容的提问来源于stack exchange,提问作者MADFROST
相关产品推荐
相关产品推荐

