Python 回文中输出的意外真值

Python 回文中输出的意外真值,python,Python,我写这样的问题是为了解决回文问题 class Solution: def isPalindrome(self, s: str) -> bool: import re s1 = re.findall(r"[a-z]", s.lower()) s2 = list(reversed(s1)) logging.debug(f"s1: {s1}, s2:{s2}, {s1==s2}") retur

我写这样的问题是为了解决回文问题

class Solution:
    def isPalindrome(self, s: str) -> bool:
        import re
        s1 = re.findall(r"[a-z]", s.lower())
        s2 = list(reversed(s1))        
        logging.debug(f"s1: {s1}, s2:{s2}, {s1==s2}")
        return s1 == s2
运行测试并成功

$ python 125.ValidPalindrome_str_easy.py MyCase.test_c
DEBUG s1: ['o', 'p'], s2:['p', 'o'], False
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
但在leetcode


程序不可能输出True。

您的函数实际上没有生成回文,这就是测试失败的原因

请参阅以下步骤:

In [1]: import re
In [2]: s = "0P"
In [3]: re.findall(r"[a-z]", s.lower())
Out[3]: ['p']                             # This is `s1`
In [4]: list(reversed(_))
Out[4]: ['p']                             # This is `s2`
正如你所看到的,它们是一样的。因为正在使用的正则表达式已删除了数字(
0-9
)字符。您只查看字符
a-z
,如果您只是反转字符串而不使用
re
,那么您就可以了


其工作原理是以-1的步长对字符串进行切片,以使其反转

In [6]: is_palindrome("0P")
Out[6]: False
In [7]: is_palindrome("madam")
Out[7]: True

请删除您的Leetcode屏幕截图,而是在每行添加四个或更多空格,将文本格式化为代码。如果你想让其他人花时间帮助你,至少花几分钟时间格式化你的问题。屏幕抓取看起来更像“零”而不是“哦”。你只需要检查字符串中的字母
a-z
是否是回文,测试是
0P
而不是
OP
。因此,当您删除这些数字时,
0P
->
P
这是一个回文。调试日志看起来不错。为什么它会返回
True
:/您能把它的评论转发给answer@Alex吗
In [6]: is_palindrome("0P")
Out[6]: False
In [7]: is_palindrome("madam")
Out[7]: True