Python3 TypeError: индексы списка должны быть целыми числами или срезами, а не str

Вопрос:У меня есть задача получить строку 'AAAABBBCCDAABBB' в список, подобный этому: ['A','B','C','D','A','B'] Я работаю над этим уже 2 часа, и я не могу получить решение. Это мой код: list = [] string = 'AAAABBBCCDAABBB' i = 1 for i in string: list.append(i) print(list) for element in list: if list[element] == list[element-1]: list.remove(list[element]) print(list) Я новичок

Вопрос:

У меня есть задача получить строку ‘AAAABBBCCDAABBB’ в список, подобный этому: [‘A’,’B’,’C’,’D’,’A’,’B’]

Я работаю над этим уже 2 часа, и я не могу получить решение. Это мой код:

list = [] string = ‘AAAABBBCCDAABBB’ i = 1 for i in string: list.append(i) print(list) for element in list: if list[element] == list[element-1]: list.remove(list[element]) print(list)

Я новичок в программировании, и ошибка “Индексы TypeError: list должны быть целыми или фрагментами, а не str” всегда отображается…

Я уже изменил сравнение

if list[element] == list[element-1]

к

if list[element] is list[element-1]

Но ошибка остается прежней. Я уже несколько раз искал googled, но всегда были списки, которым не нужен строковый формат, но мне он нужен (я прав?).

Спасибо, что помогли!
NoAbL

Лучший ответ:

Прежде всего, не называйте свои переменные после встроенных операторов python или структур данных, таких как list, tuple или даже имя импортируемого модуля, это также относится к файлам. например, назвав ваш файл socket.py и импортируя модуль socket, определенно приведет к ошибке (я оставлю вас попробовать это самостоятельно)

в вашем коде element есть строка, индексы итерации должны быть номерами не строк, поэтому вы можете указать python

дайте мне элемент в позиции 2.

но прямо сейчас вы пытаетесь сказать мне пункт в позиции A, и это даже не актуально на английском языке, без разговора о языке программирования.

вам следует использовать функцию enumerate, если вы хотите получить индексы итерации по мере ее прохождения через нее или вы могли бы просто сделать

for i in range(len(list))

и проведите цикл по диапазону длины списка, вам все равно не нужны элементы.

Вот более простой подход к тому, что вы хотите сделать

s = string = ‘AAAABBBCCDAABBB’ ls = [] for i in s: if ls: if i != ls[-1]: ls.append(i) else: ls.append(i) print(ls) Ответ №1

Это другой подход, но ваша проблема может быть решена с помощью itertools.groupby следующим образом:

from itertools import groupby string = ‘AAAABBBCCDAABBB’ answer = [group[0] for group in groupby(string)] print(answer)

Выход

[‘A’, ‘B’, ‘C’, ‘D’, ‘A’, ‘B’]

В соответствии с документацией groupby:

Сделайте итератор, который возвращает последовательные клавиши и группы из итеративного

В моем примере мы используем понимание списка для итерации по последовательным клавишам и группам и используем индекс 0 для извлечения только ключа.

Ответ №2

Вы можете попробовать следующий код:

list = [] string = ‘AAAABBBCCDAABBB’ # remove the duplicate character before append to list prev = » for char in string: if char == prev: pass else: list.append(char) prev = char print(list)

Выход:

[‘A’, ‘B’, ‘C’, ‘D’, ‘A’, ‘B’] Ответ №3

В вашем цикле element есть строка. Вы хотите иметь индекс.

Попробуйте for i, element in enumerate(list).

EDIT: i теперь будет индексом element, который вы в настоящее время выполняете.

Оцените статью
Добавить комментарий