W3docs

Как объединять списки в Python

Все способы объединить списки в Python: оператор +, extend(), распаковка, itertools.chain и str.join() для преобразования списка в строку.

Python предоставляет несколько способов объединять списки, а также превращать список строк в одну строку. На этой странице обе задачи рассмотрены в деталях:

  • Объединение списков — слияние двух и более списков в один новый список (с помощью +, extend(), распаковки или itertools.chain).
  • Объединение элементов списка в строку — с помощью метода str.join(), который склеивает элементы списка в строку с разделителем.

Понимание разницы между этими двумя операциями помогает избежать распространённой путаницы у начинающих.

Объединение двух списков в один

Использование оператора +

Самый простой способ объединить два списка — оператор +. Он возвращает новый список, содержащий все элементы обоих операндов, не изменяя оригиналы.

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined)

Вывод:

[1, 2, 3, 4, 5, 6]

Можно цепочкой применять + для объединения более двух списков в одном выражении: a + b + c.

Использование метода extend()

extend() добавляет все элементы одного списка в конец другого на месте. В отличие от +, он изменяет исходный список и не создаёт новый.

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1)

Вывод:

[1, 2, 3, 4, 5, 6]

Используйте extend(), когда исходный list1 не нужно сохранять нетронутым и вы хотите избежать создания лишней копии в памяти.

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

Использование распаковки (оператор *)

Python 3.5 и выше позволяют использовать синтаксис распаковки со звёздочкой внутри литерала списка. Это лаконично и работает с любым количеством итерируемых объектов в одном выражении.

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = [*list1, *list2]
print(combined)

Вывод:

[1, 2, 3, 4, 5, 6]

Можно также вставлять дополнительные элементы прямо в выражение: [0, *list1, *list2, 7].

Использование itertools.chain()

itertools.chain() из стандартной библиотеки объединяет любое количество итерируемых объектов лениво — промежуточный список не создаётся до тех пор, пока вы не запросите значения. Это наиболее экономичный по памяти вариант при работе с большими последовательностями.

import itertools

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list(itertools.chain(list1, list2))
print(combined)

Вывод:

[1, 2, 3, 4, 5, 6]

Передайте itertools.chain(*nested), чтобы выровнять список списков за один вызов.

Объединение элементов списка в строку с помощью str.join()

str.join() — это метод строки: он вызывается на строке-разделителе и принимает итерируемый объект в качестве аргумента. Возвращает одну строку, в которой все элементы склеены через разделитель.

delimiter.join(iterable)

Простой пример

python— editable, runs on the server

Вывод:

apple, banana, cherry

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

Распространённые разделители

РазделительВыражениеРезультат
Запятая с пробелом', '.join(['a', 'b', 'c'])a, b, c
Пробел' '.join(['Python', 'is', 'great'])Python is great
Дефис'-'.join(['2024', '01', '15'])2024-01-15
Перенос строки'\n'.join(['line one', 'line two'])многострочный блок
Без разделителя''.join(['H', 'i', '!'])Hi!

Объединение списка чисел

str.join() требует, чтобы каждый элемент был строкой. Передача целых чисел напрямую вызывает TypeError. Сначала преобразуйте их с помощью map(str, ...) или генераторного выражения.

nums = [10, 20, 30]
result = ', '.join(map(str, nums))
print(result)

Вывод:

10, 20, 30

Использование генераторного выражения даёт тот же результат и позволяет форматировать каждое число по ходу:

python— editable, runs on the server

Вывод:

12345

Создание многострочных строк

'\n'.join() — идиоматический способ построить многострочную строку из списка строк без завершающих символов новой строки.

lines = ['line one', 'line two', 'line three']
block = '\n'.join(lines)
print(block)

Вывод:

line one
line two
line three

Выбор подходящего метода

ЦельЛучший метод
Объединить два списка в новыйоператор +
Добавить все элементы одного списка в другойextend()
Объединить несколько итерируемых объектов без лишней копииitertools.chain()
Объединить внутри литерала или с дополнительными элементамираспаковка [*a, *b]
Преобразовать список строк в строку с разделителемstr.join()
Преобразовать список чисел в строкуstr.join(map(str, lst))

Связанные темы

  • Python Lists — создание, индексирование и срезы списков
  • List Methods — полный справочник по append(), extend(), remove() и другим методам
  • Loop Lists — итерация по элементам списка с помощью for и while
  • Copy Lists — поверхностное и глубокое копирование
  • List Comprehension — создание и преобразование списков в одном выражении
  • Concatenate Strings — другие способы создания строк из частей

Практика

Практика
Which of the following ways can be used to join two lists in Python?
Which of the following ways can be used to join two lists in Python?
Was this page helpful?