Вопрос:
У меня есть задача получить строку ‘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, который вы в настоящее время выполняете.