Вступление
Объединение списков - это процесс создания единого списка из нескольких меньших списков путем их последовательного соединения.
В Python есть много способов объединения списков. В частности, в этой
статье мы рассмотрим, как объединить два списка в Python с помощью
оператора плюс, оператора распаковки, оператора умножения, руководства
по объединению циклов, функции itertools.chain()
и встроенного
метода списка extend()
.
Во всех приведенных ниже фрагментах кода мы будем использовать следующие списки:
list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]
Объединение списка операторов Plus
Самый простой и понятный способ объединить два списка в Python - это +
):
list_c = list_a + list_b
print (list_c)
[1, 2, 3, 4, 5, 6, 7, 8]
Объединение списка операторов распаковки
Этот метод позволяет объединить несколько списков. Это довольно новая
функция, доступная только в Python 3.6+ . Оператор распаковки, как
следует из названия, распаковывает iterable
объект в его элементы.
Распаковка полезна, когда мы хотим сгенерировать множество аргументов из
одного списка. Например:
def foo(a, b, c, d):
return a + b + c + d
# We want to use the arguments of the following list with the foo function.
# However, foo doesn't take a list, it takes 4 numbers, which is why we need to
# unpack the list.
foo(*list_a)
# This is the same as if we were to call foo(1,2,3,4)
10
Вкратце, мы используем конструктор списка ( [a,b..]
) и генерируем
элементы нового списка по порядку, распаковывая несколько списков один
за другим:
list_c = [*list_a, *list_b, *list_a]
# This is the same as:
# list_c = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4]
print (list_c)
[1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4]
Объединение списков операторов умножения
Оператор multiply ( *
) - это частный случай конкатенации списков в
Python. Он используется для многократного повторения всего списка
(поэтому он обозначается оператором умножения):
print(list_a * 2)
[1, 2, 3, 4, 1, 2, 3, 4]
для конкатенации списка циклов
В этом методе мы пройдемся по одному списку, добавляя каждый из его элементов в другой список один за другим. Когда цикл закончится, у вас будет единый список со всеми желаемыми элементами:
for i in list_b:
list_a.append(i)
print (list_a)
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain () Объединение списков
Этот метод работает с iterables
. Он создает и возвращает итератор,
который позже можно использовать для создания связанного списка
(представьте его как стрелку, которая просто запоминает порядок
элементов в результирующем списке):
# If we were to call itertools.chain() like so
iterator = itertools.chain([1, 2], [3, 4])
# Basically the iterator is an arrow which can give us the next() element in a sequence, so if we call a list() constructor with said iterable, it works like this:
list(iterator)
Под капотом происходит что-то в этом роде:
# Iterator: The next element in this list is 1
[1, 2], [3, 4]
^
# Iterator: The next element in this list is 2
[1, 2], [3, 4]
^
# Iterator: The next element in this list is 3
[1, 2], [3, 4]
^
# Iterator: The next element in this list is 4
[1, 2], [3, 4]
^
# So the list() call looks something like:
list([1,2,3,4])
# Keep in mind this is all pseudocode, Python doesn't give the developer direct control over the iterator
Для этого метода вам нужно будет импортировать itertools
:
import itertools
list_c = list(itertools.chain(list_a, list_b))
print (list_c)
[1, 2, 3, 4, 5, 6, 7, 8]
extension () конкатенация списков
Это встроенная функция, которую можно использовать для расширения списка. Здесь мы расширяем первый список, добавляя в него элементы второго списка:
list_a.extend(list_b)
print (list_a)
[1, 2, 3, 4, 5, 6, 7, 8]
Заключение
В этой статье мы рассмотрели пять способов объединения двух списков в
Python - с помощью оператора плюс, оператора распаковки, оператора
умножения, цикла for, itertools.chain()
и extend()
.