Разбор задачи: Удаление дубликатов из отсортированного списка

Предложенный нами код решения:

def delete_duplicates(lst):
    """
    Удаляет дубликаты из отсортированного списка lst и возвращает результат в виде нового списка.
    :param lst: list, отсортированный список
    :return: list, отсортированный список без дубликатов
    """
    if not lst:
        return []
    
    # Инициализация списка результата
    result = [lst[0]]
    
    # Удаление дубликатов
    for i in range(1, len(lst)):
        if lst[i] != lst[i - 1]:
            result.append(lst[i])
    
    return result

1. Входные параметры

Функция принимает на вход один параметр:

  • lst — отсортированный список, из которого нужно удалить дубликаты.

2. Проверка на пустой список

if not lst:
    return []
  • Если список пуст (lst == []), то сразу возвращается пустой список.
  • Это базовый случай, который предотвращает ошибку доступа к элементам пустого списка.

3. Инициализация результата

result = [lst[0]]
  • Предполагается, что список не пуст (это уже проверено выше).
  • Первый элемент списка (lst[0]) всегда добавляется в итоговый список result, так как он точно не дубликат (нет предыдущих элементов для сравнения).

4. Итерация по списку

for i in range(1, len(lst)):
    if lst[i] != lst[i - 1]:
        result.append(lst[i])
  • Цикл: начинается со второго элемента (i = 1) и проверяет каждый элемент списка до конца.
  • Проверка: текущий элемент lst[i] сравнивается с предыдущим lst[i - 1].
    • Если элементы не равны, текущий элемент добавляется в список result.
    • Если элементы равны, текущий элемент пропускается (он является дубликатом).
  • Итерация продолжается, пока не будут обработаны все элементы.

5. Возврат результата

return result
  • После завершения цикла функция возвращает список result, который содержит только уникальные элементы из lst.

Пример выполнения

Входные данные: lst = [1, 1, 2, 3, 3]

  1. Инициализация: result = [1] (первый элемент добавляется сразу).
  2. Итерация по списку:
    • i = 1: lst[1] == 1, дубликат, пропускаем.
    • i = 2: lst[2] == 2, не равен lst[1], добавляем 2result = [1, 2].
    • i = 3: lst[3] == 3, не равен lst[2], добавляем 3result = [1, 2, 3].
    • i = 4: lst[4] == 3, дубликат, пропускаем.
  3. Возврат: result = [1, 2, 3].

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии