如何在保留首次出现顺序的前提下去除元组列表中的重复项?
有序去重元组列表:你的思路完全可行!
你的核心思路特别精准——用字典记录已出现的元组,利用字典键的唯一性实现去重,同时还能保留原列表的顺序,这个方向完全没问题!
先帮你修正之前的代码语法问题,基础实现可以这样写:
x = [(4,0),(4,0),(1,3),(2,5),(1,3)] new_list = [] seen = {} for t in x: # 先判断元组是否已经被记录过 if t not in seen: seen[t] = True # 标记为已出现 new_list.append(t) print(new_list) # 输出: [(4, 0), (1, 3), (2, 5)]
如果想要更符合Python风格(Pythonic)的写法,那必须推荐dict.fromkeys()方法!从Python 3.7开始,字典官方保证保留键的插入顺序,而dict.fromkeys()会按迭代原列表的顺序生成键,重复的键会自动忽略(只保留第一次出现的),一行就能搞定:
x = [(4,0),(4,0),(1,3),(2,5),(1,3)] new_list = list(dict.fromkeys(x)) print(new_list) # 输出: [(4, 0), (1, 3), (2, 5)]
要是需要兼容Python 3.7以前的版本,可以用collections.OrderedDict,它专门用来保证有序性,用法和上面类似:
from collections import OrderedDict x = [(4,0),(4,0),(1,3),(2,5),(1,3)] new_list = list(OrderedDict.fromkeys(x)) print(new_list) # 同样得到有序去重的结果
本质上这几种写法都是基于你最初的思路:用键的唯一性跟踪已出现元素,只是利用Python内置工具简化了代码,既简洁又易读。
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

