奇怪的列表分配

时间:2014-11-08 18:20:02

标签: python python-3.x

我试图编写一个可以在一个单词中找到所有palindromes的程序。例如word" 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']]

1 个答案:

答案 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"))