Python中两不等列表判断相等致变位词识别错误问题
为什么你的变位词判断代码会出错?
嘿,你遇到的问题其实是Python列表方法的一个小坑:list.sort()是原地排序的方法,它会直接修改原列表,但返回值是None。所以你代码里的判断条件s1.sort() == s2.sort(),本质上是在比较None == None,不管两个字符串实际是不是变位词,结果都会是True——这就是为什么明明listen和silena不是变位词,代码却判断为是的原因。
两种修正方案:
方案1:使用sorted()函数(推荐)
sorted()函数会返回一个新的排序后的列表,不会修改原字符串或列表,直接用它来比较就没问题:
string1 = 'listen' string2 = 'silena' if len(string1) != len(string2): print("Not an anagram") else: if sorted(string1) == sorted(string2): print("it is an anagram") else: print("not an anagram")
方案2:先调用sort(),再比较列表本身
如果你一定要用list.sort(),那得先调用它完成排序,再直接比较两个列表:
string1 = 'listen' string2 = 'silena' s1 = list(string1) s2 = list(string2) if len(s1) != len(s2): print("Not an anagram") else: s1.sort() s2.sort() if s1 == s2: print("it is an anagram") else: print("not an anagram")
小提醒
以后遇到Python的列表方法,要注意区分原地修改(返回None)和返回新对象的方法:比如sort()原地修改,sorted()返回新列表;append()原地修改返回None,而+拼接列表返回新列表。搞清楚这个就能避免很多类似的坑啦!
内容的提问来源于stack exchange,提问作者Dhruv Kapur
相关产品推荐
相关产品推荐

