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
相关产品推荐
相关产品推荐

