ПрограммированиеPython разработчик

Чем отличается метод append() от extend() у списков в Python? Приведите примеры, где неправильное понимание приводит к логическим ошибкам.

Проходите собеседования с ИИ помощником Hintsage

Ответ.

Методы append() и extend() у списков в Python служат для добавления элементов, однако делают это принципиально по-разному:

  • append(obj) добавляет один элемент (любой объект — в том числе список) в конец исходного списка
  • extend(iterable) добавляет все элементы итерируемого объекта по одному (как бы "раскрывает" его при добавлении)

Пример:

lst = [1, 2, 3] lst.append([4, 5]) # Результат: [1, 2, 3, [4, 5]] lst = [1, 2, 3] lst.extend([4, 5]) # Результат: [1, 2, 3, 4, 5]

Такая разница часто становится причиной логических ошибок, когда ожидают "плоский" список, а получают вложенные.

Вопрос с подвохом.

Что будет, если сделать list1 = [1, 2]; list2 = [3, 4]; list1.append(list2)? Как выглядит list1? Чем отличается от list1.extend(list2)?

Ответ:

  • После list1.append(list2) результат: [1, 2, [3, 4]] — второй список добавился как один элемент (вложенный список)
  • После list1.extend(list2) результат: [1, 2, 3, 4] — элементы второго списка "развёрнуты" и добавлены как отдельные элементы

Примеры реальных ошибок из-за незнания тонкостей темы.


История

Разработчик при объединении результатов парсинга из нескольких файлов делал output.append(parsed_lines). В результате вместо длинного плоского списка получал список списков (один элемент на каждый файл), что ломало всю дальнейшую обработку — в частности, функции, ожидавшие последовательность строк, начали выдавать ошибки на входных данных.


История

В проекте использовался extend для добавления строки вида "foo" (то есть строка рассматривалась как итерируемый). Это привело к тому, что символы строки стали отдельными элементами списка: ['f', 'o', 'o'] вместо хотимого "foo".


История

При сериализации данных для передачи в JSON к итоговому списку применялись append/extend в цикле без понимания различия. В результате получались структуры, нарушавшие схему, из-за чего часть микросервисов начинала падать на этапе валидации или работать некорректно.