list [-1] не нацелен на последний элемент списка (с двумя последовательными нулями в палиндроме) - PullRequest
2 голосов
/ 11 июля 2020

Я пишу простой код, чтобы проверить, является ли число палиндромом. Всякий раз, когда у числа есть два последовательных нуля, 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

Что мне не хватает?

Ответы [ 2 ]

3 голосов
/ 11 июля 2020

Это не удаляет последний элемент из списка:

palind.remove(palind[-1])

Он удаляет первый элемент списка, который равен palind[-1], что является проблемой, если имеется несколько одинаковых элементов.

Чтобы удалить последний элемент списка, сделайте следующее:

del palind[-1]
2 голосов
/ 11 июля 2020

Как и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...