Функция в массив без повторяющихся дубликатов

#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 .