列表[1]不以列表的最后一项为目标(回文中有两个连续的零)

2024-09-23 22:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个简单的代码来检查一个数字是否是回文。 每当该数字有两个连续的零时,print('removing',palind[-1])就会在列表中指向错误的零

n = 200314413002
x = n
palind = []
while n > 0:
    d = n % 10
    n = n // 10
    palind.append(d)
    
print(palind, 'is to check')    
    
actual_palind = []

for i in palind:
    if palind[0] == palind[-1] and len(palind) % 2 == 0:
        print('removing',palind[0])
        palind.remove(palind[0])
        print('removing',palind[-1])
        palind.remove(palind[-1])
        print(palind,'is still a palindrome')
        actual_palind.append(x)
    else:
        print(x,'is not a palindrome')
        break
        
print(x, 'is a palindrome')

这是输出

[2, 0, 0, 3, 1, 4, 4, 1, 3, 0, 0, 2] is to check
removing 2
removing 2
[0, 0, 3, 1, 4, 4, 1, 3, 0, 0] is still a palindrome
removing 0
removing 0
[3, 1, 4, 4, 1, 3, 0, 0] is still a palindrome
200314413002 is not a palindrome
200314413002 is a palindrome

我错过了什么


Tags: to代码列表ischecknot数字remove
2条回答

就像zvone在他们的回答中所说的那样,remove()不会根据索引进行删除,而是根据值进行删除。要根据索引删除,请使用.pop()

for i in palind:
    if palind[0] == palind[-1] and len(palind) % 2 == 0:
        print('removing',palind.pop(0))
        print('removing',palind.pop(-1))
        print(palind,'is still a palindrome')
        actual_palind.append(x)
    else:
        print(x,'is not a palindrome')
        break
        

输出:

[2, 0, 0, 3, 1, 4, 4, 1, 3, 0, 0, 2] is to check
removing 2
removing 2
[0, 0, 3, 1, 4, 4, 1, 3, 0, 0] is still a palindrome
removing 0
removing 0
[0, 3, 1, 4, 4, 1, 3, 0] is still a palindrome
removing 0
removing 0
[3, 1, 4, 4, 1, 3] is still a palindrome
removing 3
removing 3
[1, 4, 4, 1] is still a palindrome
200314413002 is a palindrome

这不会从列表中删除最后一项:

palind.remove(palind[-1])

它删除列表中第一个等于palind[-1]的项,如果有多个相等的项,则会出现问题

要删除列表的最后一项,请执行以下操作:

del palind[-1]

相关问题 更多 >