我正在尝试编写可以在一句话中找到所有palindromes的程序。例如,单词“ 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']]
错误 最佳答案
追加到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"))