Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Метод extend() в Python
metod extend() нужен для добавления всех элементов из итерируемого объекта в список. Это отличается от append(), который добавляет целый объект как один элемент.
Различие между append() и extend()
append() — добавить один элемент
my_list = [1, 2, 3]
my_list.append(4) # Добавляем число 4
print(my_list) # [1, 2, 3, 4]
my_list.append([5, 6]) # Добавляем СПИСОК как один элемент
print(my_list) # [1, 2, 3, 4, [5, 6]]
# Вложенный список!
# Доступ к элементу
print(my_list[4]) # [5, 6] — это список
print(my_list[4][0]) # 5 — элемент из вложенного списка
extend() — добавить все элементы
my_list = [1, 2, 3]
my_list.extend([4, 5]) # Добавляем ВСЕ элементы из списка
print(my_list) # [1, 2, 3, 4, 5]
# Плоский список
# Доступ к элементу
print(my_list[3]) # 4 — прямой доступ
print(my_list[4]) # 5
Производительность
import timeit
# append() в цикле (медленно: пересоздает список каждый раз)
code_append = '''
result = []
for item in range(1000):
result.append(item)
'''
# extend() один раз (быстро)
code_extend = '''
result = []
result.extend(range(1000))
'''
print(timeit.timeit(code_append, number=1000)) # ~0.05 секунд
print(timeit.timeit(code_extend, number=1000)) # ~0.01 секунд
# extend() в 5 раз БЫСТРЕЕ!
Когда использовать extend()
1. Объединение двух списков
# Плохо: append()
list1 = [1, 2, 3]
list2 = [4, 5, 6]
for item in list2:
list1.append(item) # Долго и неэффективно
print(list1) # [1, 2, 3, 4, 5, 6]
# Хорошо: extend()
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2) # Быстро и понятно
print(list1) # [1, 2, 3, 4, 5, 6]
# Или даже лучше: создать новый список
result = list1 + list2 # [1, 2, 3, 4, 5, 6]
result = [*list1, *list2] # Распаковка
2. Добавление результатов поиска
def find_answers(query):
"""Возвращает список ответов"""
results = []
for keyword in query:
# find() возвращает список
results.extend(database.find(keyword))
return results
# Альтернатива с append() будет создавать вложенные списки
3. Агрегация данных из нескольких источников
class AnsweringSystem:
def get_all_answers(self):
all_answers = []
# Получаем ответы из разных источников
all_answers.extend(self.db.get_correct_answers())
all_answers.extend(self.cache.get_cached_answers())
all_answers.extend(self.memory_store.get_recent())
return all_answers
4. Расширение конфигураций
config = {
'handlers': [],
'middleware': []
}
# Добавляем middleware из плагинов
for plugin in load_plugins():
config['middleware'].extend(plugin.get_middleware())
for plugin in load_plugins():
config['handlers'].extend(plugin.get_handlers())
Различные типы данных с extend()
# extend() работает с любым итерируемым объектом
my_list = [1, 2, 3]
my_list.extend([4, 5]) # List
my_list.extend((6, 7)) # Tuple
my_list.extend({8, 9}) # Set
my_list.extend(range(10, 12)) # Range
my_list.extend('ab') # String (добавляет по символам!)
print(my_list)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 'a', 'b']
Опасность: extend() со строками
# Осторожно!
text_list = ['Hello']
text_list.extend('World')
print(text_list) # ['Hello', 'W', 'o', 'r', 'l', 'd']
# Строка разбита по символам!
# Правильно: используй append() или []
text_list = ['Hello']
text_list.append('World')
print(text_list) # ['Hello', 'World']
# Или
text_list = ['Hello']
text_list.extend(['World'])
print(text_list) # ['Hello', 'World']
Практический пример: тест по вопросам
class QuestionSet:
def __init__(self):
self.questions = []
def add_from_file(self, filepath):
"""Добавить вопросы из файла"""
questions = load_questions_from_file(filepath)
self.questions.extend(questions) # Правильно: развернуть список
def add_from_database(self, category):
"""Добавить вопросы из БД"""
questions = database.get_by_category(category)
self.questions.extend(questions)
def get_shuffled(self):
"""Перемешать и вернуть"""
import random
shuffled = self.questions.copy()
random.shuffle(shuffled)
return shuffled
# Использование
quiz = QuestionSet()
quiz.add_from_file('easy_questions.json')
quiz.add_from_file('medium_questions.json')
quiz.add_from_database('hard')
print(len(quiz.questions)) # Все вопросы в плоском списке
Сравнение методов объединения
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# Способ 1: append() в цикле
for item in list2:
list1.append(item) # Медленно
# Способ 2: extend()
list1.extend(list2) # Быстро
# Способ 3: оператор +
result = list1 + list2 # Создает новый список (не изменяет оригинал)
# Способ 4: распаковка
result = [*list1, *list2] # Создает новый список
# Способ 5: sum() (НЕ РЕКОМЕНДУЕТСЯ)
result = sum([list1, list2], []) # Очень медленно O(n^2)
Когда extend() не нужен
# Если хочешь создать новый список
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list1.copy() # Сначала скопируем
result.extend(list2) # Потом расширим
# Или проще
result = list1 + list2 # Не изменяет оригиналы
Вывод
extend() нужен для:
- Добавления всех элементов из итерируемого объекта
- Объединения списков (быстро)
- Агрегации данных из нескольких источников
- Расширения коллекций
Правило: если хочешь добавить один элемент → append(), если хочешь добавить много элементов → extend().