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

Python列表去重并转标题大小写函数逻辑异常问题求助

Python列表去重+首字母大写练习题代码错误排查

问题背景

我是编程新手,选择Python作为首门入门学习语言,起因是Humble Bundle平台的Python学习资源正在促销。借此我接触到PyBites网站,目前正在完成一道列表处理编程练习题,提交的代码仅通过1个测试用例,其余6个均失败,已卡在该练习第三部分较长时间。在PyCharm中运行代码后发现,代码保留了第一个出现的重复项bob belderbos,但未正确处理第二个重复项brad pitt,需要定位代码错误点。
练习用到的原始姓名列表和问题代码如下:

NAMES = ['arnold schwarzenegger', 'alec baldwin', 'bob belderbos',
         'julian sequeira', 'sandra bullock', 'keanu reeves',
         'julbob pybites', 'bob belderbos', 'julian sequeira',
         'al pacino', 'brad pitt', 'matt damon', 'brad pitt']
import re

def dedup_and_title_case_names(names):
    """Should return a list of title cased names,
       each name appears only once"""
    name_list = []
    name_set = set()
    for name in names:
        if name in name_set == set(names):
            pass
        else:
            name_set.add(name)
            name_list.append(name.title())
    return name_list

核心错误点

  • 误用Python链式比较语法,判断逻辑完全不符合预期
    你写的if name in name_set == set(names)属于Python的链式比较,等价于if (name in name_set) and (name_set == set(names)),和「如果名字已存在于去重集合就跳过」的预期逻辑完全不符。
    这个条件几乎永远不会触发:遍历过程中name_set是逐个添加元素的,只有遍历完全部元素后name_set才会和set(names)(全量名字的集合)相等,但此时循环已经结束,所以pass分支从来不会执行,所有重复项本来都会被重复加入结果列表。你观察到的bob belderbos重复项看似被处理只是运行时的巧合,brad pitt的重复项没有被过滤就是逻辑失效的直接表现。
  • 冗余导入
    代码开头导入了re正则模块,但整个逻辑中没有任何用到该模块的代码,属于无效内容。

修正方案

去重判断只需要校验当前名字是否已经存在于去重集合即可,不需要额外判断集合和全量名字集合是否相等,修正后的代码如下:

NAMES = ['arnold schwarzenegger', 'alec baldwin', 'bob belderbos',
         'julian sequeira', 'sandra bullock', 'keanu reeves',
         'julbob pybites', 'bob belderbos', 'julian sequeira',
         'al pacino', 'brad pitt', 'matt damon', 'brad pitt']

def dedup_and_title_case_names(names):
    """Should return a list of title cased names,
       each name appears only once"""
    name_list = []
    name_set = set()
    for name in names:
        if name not in name_set:
            name_set.add(name)
            name_list.append(name.title())
    return name_list

运行该代码会按原始出现顺序返回去重、且每个名单词首字母大写的结果,符合题目要求。


内容的提问来源于stack exchange,提问作者BandedWagon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:48:14