Skip to main content

Command Palette

Search for a command to run...

Solving and testing removing duplicates from a list

Updated
•2 min read•View as Markdown

Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.

Задача

Убрать из списка повторы, сохранив порядок первого появления элементов.

Решение

def unique(arr: list) -> list:
    seen = set()
    result = []
    for x in arr:
        if x not in seen:
            seen.add(x)
            result.append(x)
    return result


print(unique([1, 2, 2, 3, 1, 4]))

Как это работает

Множество seen отвечает за быструю проверку «встречался ли элемент», список result сохраняет порядок. Простое приведение к set() порядок бы не сохранило.

Пример работы

[1, 2, 3, 4]

Сложность

O(n) по времени и памяти.

Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай

Такой минимум уже защищает от случайной ошибки при правках кода.

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

Читайте также:

списка · элемент · result.append(x · учебных · return · сохранило · отвечает · Тесты · Такой · Посмотрим · затем · повторы · элементов · seen.add(x · Множество · python · первого · решение · assert · Проверка · [print(unique(1 · задачу

More from this blog

N

News

794 posts