我正在尝试编写可以在一句话中找到所有palindromes的程序。例如,单词“ radar”具有2个回文radarada。我们跳过单个字母,所以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"))

08-16 23:28