Python中不使用Pandas去除元组列表中(Name, Age)部分重复项的最简方法
Python中不使用Pandas去除元组列表中(Name, Age)部分重复项的最简方法
嘿,我完全懂你不想为了这一个小需求引入Pandas的心情——毕竟没必要为了处理30个元素的列表,额外加载一个重量级库嘛!其实用原生Python就能轻松搞定,而且效率和简洁度都很可观。
核心思路
我们只需要跟踪已经出现过的(Name, Age)组合,遍历原列表时只保留每个组合的第一次出现项就行。用集合来记录已出现的组合是最优选择,因为集合的查找操作是O(1)级别的,速度非常快。
直观易懂的循环写法
这种写法逻辑清晰,新手也能一眼看懂:
lst = [("Dave", 20, "Dublin"), ("Dave", 20, "Paris"), ("Lisa", 20, "Monaco"), ("Lisa", 20, "London"), ("Frank", 56, "Berlin"), ("Frank", 40, "Berlin")] seen = set() result = [] for name, age, city in lst: # 提取(Name, Age)作为判断重复的key key = (name, age) if key not in seen: seen.add(key) result.append((name, age, city)) print(result) # 输出:[('Dave', 20, 'Dublin'), ('Lisa', 20, 'Monaco'), ('Frank', 56, 'Berlin'), ('Frank', 40, 'Berlin')]
更简洁的一行写法(可选)
如果你追求代码紧凑,可以用生成器表达式结合集合的短路特性实现,不过可读性会稍弱一些:
lst = [("Dave", 20, "Dublin"), ("Dave", 20, "Paris"), ("Lisa", 20, "Monaco"), ("Lisa", 20, "London"), ("Frank", 56, "Berlin"), ("Frank", 40, "Berlin")] seen = set() result = [t for t in lst if not ((t[0], t[1]) in seen or seen.add((t[0], t[1])))] print(result) # 输出和上面完全一致
为什么这个方法比Pandas更好?
- 无额外依赖:不需要安装和导入Pandas,代码更轻量
- 效率更高:避免了列表转DataFrame再转回列表的额外开销,对于小列表来说优势尤其明显
- 逻辑透明:所有操作都在你掌控之中,不需要理解Pandas的内部处理逻辑
备注:内容来源于stack exchange,提问作者perly
相关产品推荐
相关产品推荐

