В чем разница между методами списка append и extend в Python?

«В чем разница между методами списка append и extend в Python?» — вопрос из категории Python, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Методы append() и extend() изменяют исходный список, но делают это по-разному. Понимание этой разницы критично для корректной работы с коллекциями данных в тестах.

list.append(item)

  • Добавляет один элемент item в конец списка.
  • Если item является итерируемым объектом (например, другим списком), он будет добавлен как один вложенный элемент.
  • Длина списка увеличивается ровно на 1.

list.extend(iterable)

  • Добавляет в конец списка все элементы из итерируемого объекта iterable.
  • Итерируемый объект «раскрывается», его элементы добавляются по отдельности.
  • Длина списка увеличивается на длину iterable.

Наглядный пример с тестовыми данными:

# Исходные данные
test_results = ["PASS", "FAIL"]
new_batch_single = "SKIP"
new_batch_multiple = ["PASS", "PASS", "FAIL"]

# append() - добавляет элемент как есть
test_results.append(new_batch_multiple)
print(test_results)  # Вывод: ['PASS', 'FAIL', ['PASS', 'PASS', 'FAIL']]

# extend() - «раскрывает» итерируемый объект
test_results = ["PASS", "FAIL"]  # Сброс
test_results.extend(new_batch_multiple)
print(test_results)  # Вывод: ['PASS', 'FAIL', 'PASS', 'PASS', 'FAIL']

# append() для одиночного элемента
test_results.append(new_batch_single)
print(test_results)  # Вывод: ['PASS', 'FAIL', 'PASS', 'PASS', 'FAIL', 'SKIP']

Типичные ошибки и применение в QA:

  • Ошибка: Использовать append() для добавления элементов из другого списка, что приводит к неожиданной вложенности и усложняет последующие проверки (например, assert "PASS" in results).
  • Правильно: Использовать extend() для объединения списков, например, при агрегации результатов нескольких прогонов тестов или сборе данных из разных источников.
  • append() идеален для добавления одиночных результатов, логов или объектов.