为什么我不能在没有列表的情况下检查字符串的比较?

Why can I not check for comparisons on strings without them being lists?

我正在研究 python 中流行的回文问题。我原本以为这段代码就足够了:

def is_palindrome(input_string):
    rev_str = reversed(input_string)

    if rev_str == input_string:
        return True
    else:
        return False

但只有部分示例最终是正确的。我检查了解决方案,我不得不将字符串更改为列表以使代码正常工作,但我不明白为什么。

def is_palindrome(input_string):
    rev_str = reversed(input_string)

    if list(rev_str) == list(input_string):
        return True
    else:
        return False

任何有助于理解为什么会出现这种情况的帮助都会非常有帮助。

问题是 reversed("hello") returns 一个反向迭代器对象,而不是 "olleh." 这是为了节省内存,因为它不需要计算所有的字母直到你需要它们。

>>> reversed("hello")
<reversed object at 0x02A7B170>

如果这让您感到困惑,请查看什么是迭代器。

如果你想反转一个字符串,你可以这样做

s[::-1]

其中 s 是您的字符串。