【问题标题】:How do I make a program in Python that tells whether or not a list is a "palindrome"? [duplicate]如何在 Python 中编写一个程序来判断一个列表是否是“回文”? [复制]
【发布时间】:2021-10-14 12:18:33
【问题描述】:

这是我要回答的问题:

编写代码,接受字符串列表作为其参数,并指示该列表是否为回文。回文列表是向前读取和向后读取相同的列表。例如,列表 ["alpha", "beta", "gamma", "delta", "gamma", "beta", "alpha"] 是回文。

def palindrome_checker(list):
    if list == list.reverse():
        print('Palindrome')
    else:
        print('Not Palindrome')


user_list = []
user_input = (input('Enter list of words'))
user_list = [user_input.split()]
palindrome_checker(user_list)

无论如何,我的代码都会响应“非回文”。谁能告诉我我错过了什么?w

【问题讨论】:

  • user_list 实际上是一个列表的列表。试试user_list = user_input.split()
  • 不要叫你的名单list这是python的保留字

标签: python


【解决方案1】:

reverse 是一个就地函数,即它返回None。所以列表永远不会等于None。此外,.split() 本身提供了一个列表。 [user_input.split()] 将创建一个嵌套列表。

所以一个解决方案。

  1. .split() 中删除[]
  2. 创建列表的副本您反转它。
def palindrome_checker(lists):
    lists2=lists[:]
    lists.reverse()
    if lists2 == lists:
        print('Palindrome')
    else:
        print('Not Palindrome')


user_list = []
user_input = (input('Enter list of words'))
user_list = user_input.split()
palindrome_checker(user_list)

【讨论】:

  • 你不能做list2=lists,因为这只会创建一个指向同一个列表的指针。然后,当您执行lists.reverse() 时,两个列表都会颠倒过来。您应该使用list2 = lists[:] 创建副本。
  • @tusky 非常受欢迎。考虑接受答案
  • 不要过于挑剔,但参数名称lists 表明该方法需要多个列表的列表
【解决方案2】:

除了这里已有的答案,您还可以这样做:

my_list == list(reversed(my_list))

list == list[::-1]

编辑

第一个会因为list 上的名称冲突而失败,因为它是一个保留关键字 内置函数。如果您选择第一种方法,我建议您将变量的名称也更改为不同的名称

【讨论】:

  • 我正要提供相同的答案,所以我添加了一个small variation to yours 来获取文本输出。 +1,因为这是我认为最 Pythonic 的
  • list 是一个内置函数
  • 该术语可能不准确,但实践容易出错,应避免
【解决方案3】:

为了好玩,@bdbd 答案的变体:

def palindrome_checker(l):
    return ('' if l == list(reversed(l)) else 'Not ') + 'Palindrome'

【讨论】:

    【解决方案4】:

    list.reverse() 不返回列表的反转版本,它实际上根本不返回任何内容。 reverse函数实际上改变了原来的list对象。

    所以基本上,你在那个声明中说的是if list == None

    这有意义吗?

    您通常可以假设任何时候调用属于某个对象的方法,例如在本例中,List 对象中的reverse() 方法,该方法将更改原始对象,而不是返回新值.

    你想要的是:

    reversedList = list(reversed(original_list))
    if original_list = reversed_list:
    

    另一方面,我建议您将参数从列表重命名为其他名称,以保持清洁。您希望避免命名空间冲突,因为单词列表已经引用了类型列表和构造列表的方法list

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多