Как объединять списки в 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)Простой пример
Вывод:
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Использование генераторного выражения даёт тот же результат и позволяет форматировать каждое число по ходу:
Вывод:
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 — другие способы создания строк из частей