#python #arrays #function #loops #conditional-statements
#python #массивы #функция #циклы #условные операторы
Вопрос:
Я хочу использовать функцию, которая принимает строковую последовательность из цифр или букв и возвращает эти значения в массиве без повторяющихся дубликатов, но может иметь дубликаты, просто не связанные друг с другом.
def unique_in_order(iterable):
iterable = list(iterable)
changed = []
for i in range(len(iterable)):
if (iterable[i] != iterable[i 1]) :
changed.append(iterable[i])
break;
return changed
Комментарии:
1. Это возвращает только первое значение в последовательности, но затем не выполняет обратный цикл и не захватывает остальные.
2. Не могли бы вы предоставить пример ввода и ожидаемый результат?
Ответ №1:
Внося очень небольшие изменения в ваш код, мы можем сделать это очень легко и компактно:
def unique_in_order(iterable):
changed = []
before = None
for char in iterable:
if before != char:
before = char
changed.append(char)
return changed
x = "122333444455555666666777777788888888999999999"
z = "Mississippi"
print(unique_in_order(x))
print(unique_in_order(z))
Вывод:
['1', '2', '3', '4', '5', '6', '7', '8', '9']
['M', 'i', 's', 'i', 's', 'i', 'p', 'i']
Из-за того, что вы ожидаете, что функция получит только строку, мы можем предположить, что при повторении по ней сравнения None
никогда не будет True
. Это, в свою очередь, устанавливает новый символ в before
.