#python #list #function #for-loop #indexing
#python #Список #функция #for-цикл #индексирование
Вопрос:
Я пытаюсь написать функцию func(), которая возвращает только уникальные элементы из заданного ввода в том же порядке.
например, ‘AAAABBBCCDAABBB’ вернет [‘A’, ‘B’, ‘C’, ‘D’, ‘A’, ‘B’]
Просто новичок, поэтому было бы здорово, если бы я мог получить некоторую помощь. Прилагаемый мой код ниже — извинения, если это не лучшая практика с точки зрения удобочитаемости.
enter code here
def unique_in_order(string):
new_list =[]
#using a for loop access the elements
for n in range(len(string)):
print(string[n],string[n 1])
if string[n] != string[n 1]:
new_list.append(string[n])
return new_list
Ответ №1:
При проверке последнего элемента строки вы получаете доступ к элементу n 1, который находится за пределами строки. Исправленный код выглядит следующим образом:
def unique_in_order(string):
if len(string) == 0:
return [];
new_list = [string[0]]
#using a for loop access the elements
for n in range(1, len(string)):
print(string[n-1],string[n])
if string[n] != string[n-1]:
new_list.append(string[n])
return new_list
Ответ №2:
В python вы можете использовать метод groupby для этого
from itertools import groupby
my_str = "AAAABBBCCDAABBB"
res = list(map(lambda x: x[0], groupby(my_str)))
print(res) # ['A', 'B', 'C', 'D', 'A', 'B']
Ответ №3:
Вы столкнулись с ошибкой индекса в последнем цикле. Поскольку вы проверяете string[n 1]
в последнем цикле, когда выполняете n 1, он будет вне индекса.
Комментарии:
1. Да, я понял ошибку, но просто не пытался выполнить n-1! Еще раз спасибо
Ответ №4:
Это может быть одним из способов сделать это. Это относится к элементу перед, а не к элементу впереди, поэтому вы не получите ошибку, которую получаете.
def unique_in_order(string):
new_list = []
for i in range(len(string)):
# if the new letter isn't same as previous then add to list
if string[i] != string[i - 1]:
new_list.append(string[i])
else:
pass
return new_list `
Ответ №5:
Регулярное выражение?
>>> re.findall(r'(.)1*', 'AAAABBBCCDAABBB')
['A', 'B', 'C', 'D', 'A', 'B']