我试图编写一个可以在一个单词中找到所有palindromes的程序。例如word" radar"有2个回文radar
和ada
。我们跳过单个字母,因此r, a, d
等不是回文。
import copy
def ILEP(word):
lista = list(word)
counter = 0
pali = []
def isPalindrome(listaWord):
backup = copy.deepcopy(listaWord)
backup.reverse()
a = ''.join(backup)
b = ''.join(listaWord)
if(a == b):
return True
else:
return False
for i in range(len(lista)):
current = [lista[i]]
for j in range(i+1, len(lista)):
current.append(lista[j])
if(isPalindrome(current)):
print(current)
pali.append(current)
counter+=1
print(pali)
return counter
print(ILEP("radar"))
该程序正确地找到所有回文,但它确定列表pali
错误。控制台:
['r', 'a', 'd', 'a', 'r']
['a', 'd', 'a']
[['r', 'a', 'd', 'a', 'r'], ['a', 'd', 'a', 'r']]
2
正如你可以看到它会打印回文['r', 'a', 'd', 'a', 'r']
和['a', 'd', 'a']
,但列表pali
的错误值为[['r', 'a', 'd', 'a', 'r'], ['a', 'd', 'a', 'r']]
答案 0 :(得分:3)
您在追加current
后更改了列表pali
。你必须复制一份:
def is_palindrome(word):
return word[::-1] == word
def ILEP(word):
pali = []
for i, ch in enumerate(word):
current = [ch]
for ch in word[i+1:]:
current.append(ch)
if is_palindrome(current):
print(current)
pali.append(current[:])
print(pali)
return len(pali)
print(ILEP("radar"))