我正在编写一个程序,以使用Python使用列表来识别回文。但是,我的程序始终声明输入的单词是回文,即使显然不是。
word = input("Type a word, and I'll tell you if it's a palidrome or not: ")
word = " ".join(word)
new_word = word.split() #forms a list from user-inputted word
print(new_word)
variable = new_word
variable.reverse() #reverses word list
print(variable)
if variable == new_word:
print("This is a palidrome")
else:
print("This is not a palidrome")
答案 0 :(得分:1)
variable
是new_word
列表的浅表副本,因此variable
也被颠倒了(因为它指向同一列表)
。
尝试使用
variable = copy.deepcopy(new_word)
答案 1 :(得分:1)
也可以通过反转输入字符串直接获得结果,请使用以下代码:-
word = input("Type a word, and I'll tell you if it's a palidrome or not: ")
new_word = list(reversed(word)) #Reversing the string
new_word = ''.join(new_word) # Converting list into string
if word == new_word :
print("This is a palidrome")
else:
print("This is not a palidrome")
OR
我对您的代码进行了更改:-
word = input("Type a word, and I'll tell you if it's a palidrome or not: ")
word = " ".join(word)
new_word = word.split() #forms a list from user-inputted word
print(new_word)
variable = new_word.copy() # This is the change I have made.
variable.reverse() #reverses word list
print(variable)
if variable == new_word:
print("This is a palidrome")
else:
print("This is not a palidrome")
希望对您有帮助。
答案 2 :(得分:1)
variable == new_word
始终为真的原因是在这种情况下,赋值运算符仅创建一个新的指针,而不是一个新的列表。
换句话说,variable = new_word
不会不复制列表-它使variable
指向内存中的同一列表。因此,当您反转variable
时,实际上是在反转原始列表。如果您在运行new_word
之后打印variable.reverse()
,就会看到此信息。
This article是对指针的有用介绍,而this one是对赋值,浅拷贝与深拷贝的很好解释。由于您的列表只是一个字符串列表,因此浅拷贝即可解决问题。[1]深度复制是多余的,但是也可以。
variable = list(new_word)
对于Python 3.3和更高版本,列表具有内置的copy
方法:
variable = new_word.copy()
另一种选择是使用切片,但不提供开始或结束索引:
variable = new_word[:]
最后,copy
模块提供了用于创建浅表副本的功能:
variable = copy.copy(new_word)
import copy
variable = copy.deepcopy(new_word)
[1]尽管mrtnlrsn表示您进行了浅表复制,但事实并非如此,如链接文章所述。
答案 3 :(得分:0)
您需要更换
variable = new_word
使用
variable = new_word[:]
这将为您的变量制作一个适当的副本,您可以独立对其进行操作。