代码之家  ›  专栏  ›  技术社区  ›  Apollo giaset

确定字符串是否为回文

  •  6
  • Apollo giaset  · 技术社区  · 10 年前

    我编写了两个简单的函数来确定字符串是否为回文。我以为它们是等价的,但2不起作用。这是为什么?

    1.

    def is_palindrome(string):
        if string == string[::-1]:
            return True
        else:
            return False
    

    2.

    def is_palindrome(string):
        if string == reversed(string):
            return True
        else:
            return False
    
    4 回复  |  直到 6 年前
        1
  •  10
  •   Simeon Visser    10 年前

    reversed 不创建字符串,而是创建“反转”对象:

    >>> reversed('radar')
    <reversed object at 0x1102f99d0>
    

    因此,字符串 'radar' 与对象不相等 reversed('radar') 。要使其工作,您需要确保 颠倒的 对象实际求值:

    def is_palindrome(string):
        if string == u''.join(reversed(string)):
            return True
        else:
            return False
    

    这个 u''.join(reversed(string)) 插入件 u'' 在字符串中的每个字符之间,这将导致反转的字符串转换为字符串对象。

        2
  •  1
  •   Alex Martelli    10 年前

    在第二个步骤中,您需要 str 来自 reversed 类型实例--这并不难:

    if string == ''.join(reversed(string)):
    
        3
  •  0
  •   pylang    7 年前

    对于字符串:

    def is_palindrome(s):
        """Return True if a string is a palindrome."""
        return s == s[::-1]
    

    对于常规可迭代项(包括字符串):

    def is_palindrome(iterable):
        """Return True if an iterable is a palindrome."""
        if list(iteable) == list(reversed(iterable))
    
        4
  •  0
  •   Suraj Rao Raas Masood    6 年前
    str = input("Enter a string")
    print("\n".join(["Inserted string is" + "NOT"*((str[::-1])!=str)+ " a palindrome"]))