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

Python变位词检测函数误判:排序后列表为何总被判定等价?

为什么判断变位词的函数总是返回True?

你的问题核心出在对Python列表sort()方法的理解上:

Python中的list.sort()是原地排序方法——它会直接修改原列表的顺序,但方法本身的返回值是None。

你代码里的这一行:

return word1List.sort() == word2List.sort()

实际上是在比较None == None,无论两个列表原本内容如何,这个比较的结果必然是True。

修正方案

你已经在前面两行调用过word1List.sort()和word2List.sort()完成了原地排序,直接比较排序后的列表即可:

def isAnagram(word1: str, word2: str) -> bool:
    word1List = []
    word2List = []

    for letter in word1:
        word1List.append(letter)
    for letter in word2:
        word2List.append(letter)
    
    word1List.sort()
    word2List.sort()
    
    return word1List == word2List  # 直接比较排序后的列表

如果想简化代码,也可以用sorted()函数(它会返回一个新的排序后的列表,不修改原对象):

def isAnagram(word1: str, word2: str) -> bool:
    return sorted(word1) == sorted(word2)

这样连手动转列表的循环都可以省去,sorted()直接能处理字符串。

规避此类bug的注意点

  • 区分原地修改的方法(如list.sort()、list.append())和返回新对象的函数/方法(如sorted()、str.strip()):原地方法返回None,不要用它们的返回值做比较或赋值。
  • 如果需要基于修改后的结果做操作,要么先执行原地修改,再使用原对象;要么直接用返回新对象的方式获取结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:47:30