number палиндром TypeError: объект int не может быть подписан - PullRequest
0 голосов
/ 20 июня 2020

Я хочу создать новый список со списком чисел, а в новом списке могут быть только номера палиндрома.

l = [34, 435, 343, 765, 87878, 25752]


nwelist = [343, 87878, 25752]

Что я пробовал:

d = []
l = [34, 435, 343, 765, 87878, 25752]
for i in l:
    if str(i)[0:len(l)//2] == i[len(l)//2:-1]:
        d.append(i)

ошибка:

Traceback (most recent call last):
  File "C:/Users/Caitlin/AppData/Local/Programs/Python/Python38-32/continue.py", line 4, in <module>
if str(i)[0:len(l)//2] == i[len(l)//2:-1]:
TypeError: 'int' object is not subscriptable

Ответы [ 3 ]

3 голосов
/ 20 июня 2020

Проверьте с помощью

d = [x for x in l if str(x)==str(x)[::-1]]
[343, 87878, 25752]
1 голос
/ 20 июня 2020

Проблема, приводящая к ошибке, заключается в том, что справа от == у вас есть i[len(l)//2:-1], где должно быть str(i)[len(l)//2:-1]. Однако есть и другие проблемы. Поскольку вам нужно использовать i как строку, я предлагаю преобразовать ее заранее, а также предварительно вычислить длину. Затем вы можете упростить код проверки палиндрома:

d = []
l = [34, 435, 343, 765, 87878, 25752]
for i in l:
    s = str(i)
    ln = len(s)
    if s[0:ln//2] == s[ln-1:ln//2:-1]:
        d.append(i)

print(d)

Вывод:

[343, 87878, 25752]

Обратите внимание, что это исправляет ошибки в вашем коде, но я определенно рекомендую использовать код в ответе @YOBEN_S вместо этого.

0 голосов
/ 20 июня 2020

Вы также можете просто использовать filter и создать условие:

my_list = [34, 435, 343, 765, 87878, 25752]

[*filter(lambda x: str(x) == str(x)[::-1], my_list)]
[343, 87878, 25752]
...