You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:43:15