如果不将它们作为列表,为什么我不能检查字符串的比较?

时间:2017-05-04 02:04:13

标签: python algorithm python-2.7 palindrome

我正在研究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

了解为何会出现这种情况的任何帮助都会非常有用。

1 个答案:

答案 0 :(得分:1)

问题是reverse(“hello”)返回一个反向迭代器对象,而不是“olleh”。这是为了节省内存,因为在您需要它们之前不需要计算所有字母。

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

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

如果要反转字符串,可以执行

s[::-1]

其中s是你的字符串。