Расширение списков в Python: метод extend и альтернативы

Раздел: Основы Python -> Операции со списками

Метод extend для списков в Python

Метод extend() добавляет все элементы из переданного итерируемого объекта в конец текущего списка. Он изменяет список на месте и не возвращает новый. Это основной способ объединить последовательности, когда нужно сохранить исходный список и дополнить его.

Самый простой способ расширить список - вызвать list.extend(iterable). Например:

a = [1, 2, 3]
a.extend([4, 5])
print(a)

Python list element (получение элемента списка в python)

[1, 2, 3, 4, 5]

Python list extend (метод extend для списка)

Метод принимает любой итерируемый объект: список, кортеж, строку, множество, словарь, генератор и т.д. Элементы извлекаются по одному и добавляются в конец.

Как добавить элементы из кортежа или строки?

Вызов extend с кортежем или строкой работает аналогично. Строка разбивается на отдельные символы:

b = [0]
b.extend((1, 2))
print(b)
b.extend('abc')
print(b)

Python empty list (создание пустого списка)

[0, 1, 2]
[0, 1, 2, 'a', 'b', 'c']

Python list slice (срезы списков в python)

Если нужно добавить строку как один элемент, следует использовать append() или обернуть строку в список: b.extend(['abc']).

Как использовать оператор += для расширения списка?

Оператор += для списка работает как вызов extend - модифицирует список на месте:

c = [1, 2]
c += [3, 4]
print(c)

Python list function (функции для работы со списками)

[1, 2, 3, 4]

Python добавить элемент в массив (добавление элемента в конец списка (append) в python)

Важно: левая часть должна быть списком. При попытке использовать c += 5 возникнет ошибка, так как число неитерируемо.

Как расширить список с помощью среза (slice assignment)?

Присваивание срезу list[len(list):] = iterable делает то же самое, что и extend. Этот способ удобен, когда нужно вставить элементы в произвольную позицию:

d = [10, 20]
d[len(d):] = [30, 40]
print(d)

элемент двумерного массива python (доступ к элементу двумерного массива (списка списков) в python)

[10, 20, 30, 40]

Python обратиться к элементу списка (обращение к элементу списка по индексу в python)

Замена среза на позиции list[2:4] = ... тоже работает, но она удаляет элементы на этом участке.

Как расширить список, перебирая элементы в цикле?

Если метод extend по какой-то причине не подходит, можно использовать цикл с append(). Этот вариант менее эффективен, но даёт больше контроля (например, можно фильтровать элементы):

e = []
for x in 'hello':
    if x != 'l':
        e.append(x)
print(e)

как заменить элемент в списке python (замена элемента в списке по индексу (list[2] = new_value) в python)

['h', 'e', 'o']

Такой подход оправдан при сложной логике добавления.

Типичные ошибки и проблемы

  • TypeError: 'int' object is not iterable - если передать число. Решение: обернуть в список: list.extend([5]) или использовать append.
  • extend не возвращает новый список - он изменяет исходный. Новички иногда ожидают, что a.extend(b) вернёт результат, и пишут c = a.extend(b). На самом деле c станет None. Нужно работать с изменённым a.
  • Путаница с append: a.append([4,5]) добавляет вложенный список, а не отдельные элементы. Если нужны элементы, используйте extend.
  • Изменение списка во время итерации - если расширять список, по которому идёт цикл, можно получить бесконечный цикл или пропуски. Лучше сначала скопировать список или собирать новые элементы в отдельный список.
- Python максимальный элемент массива (поиск максимального элемента в списке с помощью max в python)
- Python одинаковые элементы списков (поиск одинаковых (повторяющихся) элементов в списках python)
- Find elements python (поиск элементов в списке по условию (list comprehension, filter) в python)

Расширенные примеры использования extend()

Ниже приведены разнообразные примеры с пояснениями и выводом. Для каждого примера показан код и результат его выполнения.

Пример 1. Базовое расширение списка другим списком

Пример
a = [1, 2]
a.extend([3, 4])
print('a:', a)
a: [1, 2, 3, 4]

Все элементы второго списка добавляются в конец первого.

Пример 2. Расширение кортежем

Пример
b = [0]
b.extend((10, 20))
print('b:', b)
b: [0, 10, 20]

Кортеж - итерируемый объект, поэтому каждый его элемент становится элементом списка.

Пример 3. Расширение строкой

Пример
c = ['!']
c.extend('abc')
print('c:', c)
c: ['!', 'a', 'b', 'c']

Строка разбивается на символы. Если нужно добавить строку целиком, используйте c.append('abc') или c.extend(['abc']).

Пример 4. Расширение множеством (set)

Пример
d = [1, 2]
d.extend({3, 4, 5})
print('d:', d)
d: [1, 2, 3, 4, 5]

Порядок элементов из множества может отличаться от заданного, так как множество не упорядочено.

Пример 5. Расширение словарём (dict)

Пример
e = ['a']
e.extend({ 'x': 1, 'y': 2 })
print('e:', e)
e: ['a', 'x', 'y']

Из словаря добавляются только ключи. Чтобы добавить значения, используйте .extend(d.values()).

Пример 6. Расширение с помощью генератора

Пример
f = [0]
f.extend(x*2 for x in range(3))
print('f:', f)
f: [0, 0, 2, 4]

Генератор не создаёт промежуточную последовательность, что экономит память.

Пример 7. Расширение с помощью map()

Пример
g = []
g.extend(map(str, [1, 2, 3]))
print('g:', g)
g: ['1', '2', '3']

Функция map возвращает итератор, который немедленно обходится extend.

Пример 8. Расширение с помощью filter()

Пример
h = [0]
h.extend(filter(lambda x: x > 2, [1, 2, 3, 4]))
print('h:', h)
h: [0, 3, 4]

В список попадают только элементы, удовлетворяющие условию.

Пример 9. Расширение пустым итерируемым объектом

Пример
i = [1, 2]
i.extend([])
print('i:', i)
i: [1, 2]

Список не изменяется, так как в пустой последовательности нет элементов.

Пример 10. Разница между extend и append для вложенных структур

Пример
j = []
j.append([1, 2])
print('j после append:', j)

k = []
k.extend([1, 2])
print('k после extend:', k)
j после append: [[1, 2]]
k после extend: [1, 2]

append добавляет переданный объект как один элемент, extend распаковывает итерируемый объект.

Пример 11. Использование оператора +=

Пример
l = [1]
l += [2, 3]
print('l:', l)
l: [1, 2, 3]

Эквивалентно l.extend([2,3]).

Пример 12. Использование slice assignment

Пример
m = [10]
m[len(m):] = (20, 30)
print('m:', m)
m: [10, 20, 30]

Аналогично extend, но позволяет вставлять элементы в любую позицию, заменив указанный срез.

Пример 13. Ошибка при передаче неитерируемого объекта

Пример
n = [1]
# n.extend(5)  # TypeError
try:
    n.extend(5)
except TypeError as e:
    print('Ошибка:', e)
# Правильный вариант: n.extend([5])
n.extend([5])
print('n:', n)
Ошибка: 'int' object is not iterable
n: [1, 5]

Число не является итерируемым, поэтому вызывается исключение. Решение - обернуть число в список.

Пример 14. Extend с None

Пример
o = []
try:
    o.extend(None)
except TypeError as e:
    print('Ошибка:', e)
Ошибка: 'NoneType' object is not iterable

None тоже не итерируем. Перед вызовом стоит проверять значение.

Пример 15. Совместное использование extend и копирования списка

Пример
original = [1, 2, 3]
copy_for_extension = original[:]
copy_for_extension.extend([4, 5])
print('original:', original)
print('copy:', copy_for_extension)
original: [1, 2, 3]
copy: [1, 2, 3, 4, 5]

Если нужно сохранить исходный список неизменным, создаётся копия перед extend.

Метод extend для списка - comments

En
Python list extend (python)