Как соединить два или несколько списков на Python

  1. Соединить два списка на Python
  2. += чтобы скомпоновать два списка на месте на Python
  3. Метод itertools.chain объединил два списка на Python
  4. Метод extend() для конкатендации списков на Python
  5. [*a, *b] распаковка метода в конкатеннации списков Python
  6. Заключение

Список на Python](/ru/tutorial/python-3-basic-tutorial/data-type-list/) представляет собой структуру данных, содержащую упорядоченную коллекцию элементов.

Операция по склеиванию двух списков называется конкатенация. В Python можно скомпоновать два списка либо в месте, либо в месте.

Предположим, у нас есть два списка, которые нужно свести воедино,

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]

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

Мы представим эти различные методы и проведем сравнение производительности.

Соединить два списка на Python

Оператор + может объединять два списка и возвращать новый.

>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = list1 + list2
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]

+= чтобы скомпоновать два списка на месте на Python

+= аналогично вышеуказанному методу, но он изменит данные первого списка на месте.

>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1 += list2
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]

Метод itertools.chain объединил два списка на Python

цепочка из модуля itertools рассматривает последовательные последовательности как одну единственную последовательность,

>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> import itertools
>>> result = list(itertools.chain(list1, list2))
[1, 2, 3, 4, 5, 6, 7, 8]
Информация

itertools.chain имеет альтернативный конструктор - intertools.chain.from_iterable(). Он имеет единственный итерабельный аргумент, входные данные которого оцениваются лениво.

Метод extend() для конкатендации списков на Python

Метод extend() расширяет список, добавляя элементы из итерабельного.

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

Он также изменяет данные о выходе из списка на месте, вместо того, чтобы возвращать новый список.

[*a, *b] распаковка метода в конкатеннации списков Python

Дополнительная распаковка типа * для итерабельного оператора распаковки и ** для оператора распаковки словаря расширена из Python 3.5, как поясняется в PEP-0448.

>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = [*list1, list2]
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]

Этот метод не может быть применим в случае N списков, если только Вы не хотите распаковывать каждый список вручную.

Предупреждение

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

>>> A = [1,2,3]
>>> B = [4,5,6]
>>> C = [7,8,9]
>>> [*t for t in [A,B,C]]
SyntaxError: iterable unpacking cannot be used in comprehension

Заключение

Версия На месте?
a + b - Нет
list(intertools.chain(a,b)) >=2.3 Нет
[*a, *b] >=3.5 Нет
a += b - Да
a.extend(b) - Да

Мы используем [модуль perfplot (https://github.com/nschloe/perfplot) для comapare the performance вышеуказанных методов.

Python List Концентрационные методы Концентрация Методы Сравнение производительности

Как видно на графике, методы a.extension(b) и a+b практически одинаковы по производительности и являются лучшими среди всех методов. Метод list(chain(a,b)) имеет худшую производительность.

Сопутствующая статья - Python List

  • В чем разница между списочными методами добавлять и расширять
  • Как преобразовать список в струну на Python
  • В чем разница между делом, удалением и попаданием в списки Pythonа
  • Как быстро проверить, существует ли значение в списке Python
  • Как дублировать список на Python
  • Как сравнять списки на Python
  • Как создать список с определенным размером на Python
  • comments powered by Disqus