Автор оригинала: Guest Contributor.
Вступление
Конкатенация списков акт создания одного списка из нескольких меньших списков путем последовательного соединения их вместе.
Существует множество способов объединения списков в Python. В частности, в этой статье мы рассмотрим как объединить два списка в Python с помощью оператора plus, оператора unpack, оператора multiply, manual for loop concatenation, функции itertools.chain()
и встроенного метода list extend()
.
Во всех приведенных ниже фрагментах кода мы будем использовать следующие списки:
list_a = [1, 2, 3, 4] list_b = [5, 6, 7, 8]
Плюс Конкатенация Списка операторов
Самый простой и простой способ объединить два списка в Python-это оператор plus ( +
):
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]
Конкатенация списков extend()
Это встроенная функция, которую можно использовать для расширения списка. Здесь мы расширяем первый список, добавляя в него элементы второго списка:
list_a.extend(list_b) print (list_a)
[1, 2, 3, 4, 5, 6, 7, 8]
Вывод
В этой статье мы рассмотрели пять способов объединения двух списков в Python – с помощью оператора plus, оператора unpack, оператора multiply, цикла for, itertools.chain()
и extend()
.