Рубрики
Без рубрики

Как объединить списки в Python? [Интерактивное руководство]

Таким образом, у вас есть два или более списков, и вы хотите приклеить их вместе. Это называется конкатенацией списка. Как вы можете это сделать? https://youtu.be/9rrrqinueg8u Это шесть способов объединения списков: перечисление оператора ConcateNation + список APPEND () MEDIOSTLIST EXTEND () Оператор Методомер * Itertools.Chain () Список [1, 2, 3] B = [4, 5, 6] # 1. … Как объединить списки в Python? [Интерактивное руководство] Подробнее »

Автор оригинала: Chris.

Таким образом, у вас есть два или более списков, и вы хотите приклеить их вместе. Это называется Список конкатенации Отказ Как вы можете это сделать?

Это шесть способов объединения списков:

  1. Список оператор конкатенации +
  2. Список Добавить () метод
  3. Список продлить () метод
  4. Звездочный оператор *
  5. Itertools.Chain ()
  6. Список понимания
a = [1, 2, 3]
b = [4, 5, 6]

# 1. List concatenation operator +
l_1 = a + b

# 2. List append() method
l_2 = []

for el in a:
    l_2.append(el)
    
for el in b:
    l_2.append(el)


# 3. List extend() method
l_3 = []
l_3.extend(a)
l_3.extend(b)

# 4. Asterisk operator *
l_4 = [*a, *b]

# 5. Itertools.chain()
import itertools
l_5 = list(itertools.chain(a, b))

# 6. List comprehension
l_6 = [el for lst in (a, b) for el in lst]

Выход:

'''
l_1 --> [1, 2, 3, 4, 5, 6]
l_2 --> [1, 2, 3, 4, 5, 6]
l_3 --> [1, 2, 3, 4, 5, 6]
l_4 --> [1, 2, 3, 4, 5, 6]
l_5 --> [1, 2, 3, 4, 5, 6]
l_6 --> [1, 2, 3, 4, 5, 6]
'''

Какой лучший способ объединить два списка?

Если вы заняты, вы можете узнать лучший ответ немедленно. Вот:

  • Для объединения двух списков L1 , L2 Используйте l1.extend (l2) Метод, который является самым быстрым и наиболее читаемым.
  • Чтобы объединить более двух списков, используйте оператор распаковки (звездочки) [* l1, * l2, ..., * ln] Отказ

Вы найдете все эти шесть способов объединения списков в практических проектах кода, так что важно, чтобы вы их очень хорошо знали. Давайте погрузимся в каждый из них и обсудим плюсы и минусы.

Статьи по Теме:

  • Окончательное руководство по спискам Python

1. Список конкатенации с + оператор

Если вы используете оператор + на два целых числа, вы получите сумму этих целых чисел. Но если вы используете оператор + в двух списках, вы получите новый список, который является конкатенацией этих списков.

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = l1 + l2
print(l3)

Выход:

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

Проблема с оператором + для Concatenation в списке состоит в том, что он создает новый список для каждого операции конкатенации списка. Это может быть очень неэффективным, если вы используете оператор + несколько раз в цикле.

Представление:

Как быстро используется оператор +? Вот общий сценарий, как люди используют его, чтобы добавить новые элементы в список в цикле. Это очень неэффективно:

import time

start = time.time()

l = []
for i in range(100000):
    l = l + [i]

stop = time.time()

print("Elapsed time: " + str(stop - start))

Выход:

Elapsed time: 14.438847541809082

Эксперименты проводились на моем ноутбуке с процессором INTEL (R) CORE (TM) I7-8565U 1,8 ГГц (с Turbo Boost до 4,6 ГГц) и 8 ГБ ОЗУ.

Я измерил The Start и Stop Timestams, чтобы рассчитать общее прошедшее время для добавления 100 000 элементов в список.

Результат показывает, что для выполнения этой операции требуется 14 секунд.

Это кажется медленно (это!). Итак, давайте расследовать некоторые другие методы объединения и их производительности:

2. Список конкатенации с добавлением ()

list.append (x) Метод – в качестве имени предлагает-appends элемент х до конца список . Вы можете прочитать мой полное руководство в блоге об этом здесь.

Вот аналогичный пример, который показывает, как вы можете использовать Добавить () Способ для объединения двух списков L1 и L2 и хранить результат в списке L1 Отказ

l1 = [1, 2, 3]
l2 = [4, 5, 6]
for element in l2:
    l1.append(element)
print(l1)

Выход:

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

Это кажется немного странным для объединения двух списков, итерацией по каждому элементу в одном списке. Вы узнаете о альтернативе в следующем разделе, но сначала проверьте производительность!

Представление:

Я выполнил аналогичный эксперимент, как и раньше.

import time

start = time.time()

l = []
for i in range(100000):
    l.append(i)

stop = time.time()

print("Elapsed time: " + str(stop - start))

Выход:

Elapsed time: 0.006505012512207031

Я измерил The Start и Stop Timestams, чтобы рассчитать общее прошедшее время для добавления 100 000 элементов в список.

Результат показывает, что для выполнения этой операции требуется всего 0,006 секунды. Это более чем в 2000 раз улучшении по сравнению с 14 секунду при использовании оператора + для той же проблемы.

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

3. Список конкатенации с расширением ()

Вы изучали Добавить () метод в предыдущих пунктах. Основной проблемой с этим является то, что если вы хотите объединить два списка, вы должны повторять все элементы списков и добавить их один за другим. Это сложно, и обязательно должно быть лучше. Здесь?

Вы делаете ставку, есть!

Метод list.exdend (iTer) Добавляет все элементы в ИТЕР до конца Список Отказ

Разница между Добавить () и продлить () Это то, что первое добавляет только один элемент, а последний добавляет коллекцию элементов в список.

Вот аналогичный пример, который показывает, как вы можете использовать продлить () Способ для объединения двух списков L1 и L2 Отказ

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l1.extend(l2)
print(l1)

Выход:

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

Код показывает, что продлить () Метод более читаемый и краткий, чем имерственно звонить Добавить () метод как делается ранее.

Но это тоже быстро? Давайте проверим производительность!

Представление:

Я выполнил аналогичный эксперимент, как и раньше для Добавить () метод.

import time

start = time.time()

l = []
l.extend(range(100000))

stop = time.time()

print("Elapsed time: " + str(stop - start))

Выход:

Elapsed time: 0.0

Я измерил The Start и Stop Timestams, чтобы рассчитать общее прошедшее время для добавления 100 000 элементов в список.

Результат показывает, что требуется незначительное время для запуска кода (0,0 секунд по сравнению с 0,006 секунды для работы Append () выше).

То продлевать() Метод является наиболее лаконичным и самым быстрым способом объединения списков.

Но еще больше …

4. Список конкатенации со звездочкой *

Существует много приложений оператора Звездочки (прочитайте эту статью в блоге, чтобы узнать обо всех них). Но один хороший трюк – использовать его как оператор распаковки, который «распаковывает» содержимое структуры данных контейнера, такую как список или словарь в другой.

Вот аналогичный пример, который показывает, как вы можете использовать оператор Asterisk для объединения двух списков L1 и L2 Отказ

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = [*l1, *l2]
print(l3)

Выход:

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

Код показывает, что оператор Звездочки короткий, лаконичный и читаемый (ну для Python Pros не менее). И приятное, что вы также можете использовать его для объединения более двух списков (пример: L4 = [* L1, * L2, * L3] ).

Но Как насчет его выступления?

Представление:

Вы видели до этого продлить () очень быстро. Как оператор звездочки сравнивает против продлить () метод? Давайте разберемся!

import time

l1 = list(range(0,1000000))
l2 = list(range(1000000,2000000))

start = time.time()
l1.extend(l2)
stop = time.time()

print("Elapsed time extend(): " + str(stop - start))
# Elapsed time extend(): 0.015623092651367188

start = time.time()
l3 = [*l1, *l2]
stop = time.time()

print("Elapsed time asterisk: " + str(stop - start))
# Elapsed time asterisk: 0.022125720977783203

Я измерил The Start и Stop Timestams, чтобы рассчитать общее истеченное время для объединения двух списков 1 000 000 элементов каждый.

Результат показывает, что метод Extend на 32% быстрее, чем оператор Asterisk для данного эксперимента.

Чтобы объединить два списка, используйте метод Extend (), который более читается и быстрее по сравнению с распаковкой.

Хорошо, давайте по-настоящему по-настоящему Nerdy – как насчет внешних библиотек?

5. Список конкатенации с iTertools.Chain ()

Python’s Itertools Модуль предоставляет множество инструментов для манипулирования iTerables, такие как Списки Python Отказ Интересно, что они также имеют способ объединения двух по величине. После преобразования в результате результирующегося в список вы также можете достичь того же результата, что и раньше.

Вот аналогичный пример, который показывает, как вы можете использовать Itertools.Chain () Способ для объединения двух списков L1 и L2 Отказ

import itertools

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = list(itertools.chain(l1, l2))
print(l3)

Выход:

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

Результат такой же. По мере того, как читабельность хуже, чем использование Extend (), Append (), или даже оператора звездочка, вы можете задаться вопросом:

Это какое быстрее?

Представление:

Вы видели до этого продлить () очень быстро. Как оператор звездочки сравнивает против продлить () метод? Давайте разберемся!

import time
import itertools

l1 = list(range(2000000,3000000))
l2 = list(range(3000000,4000000))

start = time.time()
l1.extend(l2)
stop = time.time()

print("Elapsed time extend(): " + str(stop - start))
# Elapsed time extend(): 0.015620946884155273

start = time.time()
l3 = list(itertools.chain(l1, l2))
stop = time.time()

print("Elapsed time chain(): " + str(stop - start))
# Elapsed time chain(): 0.08469700813293457

Я измерил The Start и Stop Timestams, чтобы рассчитать общее истеченное время для объединения двух списков 1 000 000 элементов каждый.

Результат показывает, что продлить () Метод в 5,6 раза быстрее, чем Itertools.Chain () Метод данного эксперимента.

Вот моя рекомендация:

Никогда не используйте Itertools.Chain () Потому что это не только менее читаемо, это также медленнее, чем продлевать() Метод или даже встроенный метод распаковки более двух списков.

Итак, давайте вернемся к большему количеству решений Pythonic: все любят понимание списка …

6. Список конкатенации с пониманием списка

Понимание списка является компактным способом создания списков. Простая формула – [Выражение + контекст] Отказ

  • Выражение: Что делать с каждым элементом списка?
  • Контекст: в каком списке элементы выбрать? Он состоит из произвольного количества для и если утверждения.

Пример [X для X в диапазоне (3)] Создает список [0, 1, 2] .

Нужно повысить понимание списка? Прочитайте это руководство в блоге.

Вот аналогичный пример, который показывает, как вы можете использовать понимание списка для объединения двух списков L1 и L2 Отказ

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = [ x for lst in (l1, l2) for x in lst ]
print(l3)

Выход:

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

Какой беспорядок! Вы никогда не пишете код, как это на практике. И все же, учебники, как это Один предложил этот точно такой же метод.

Идея состоит в том, чтобы сначала проиграть все списки, которые вы хотите объединить в первой части контекста lst в (l1, l2) а затем повторять все элементы в соответствующем списке во второй части контекста Для х в Lst Отказ

Вы получаете скорость выступления из этого?

Представление:

Вы видели до этого продлить () очень быстро. Как оператор звездочки сравнивает против продлить () метод? Давайте разберемся!

import time

l1 = list(range(4000000,5000000))
l2 = list(range(6000000,7000000))

start = time.time()
l1.extend(l2)
stop = time.time()

print("Elapsed time extend(): " + str(stop - start))
# Elapsed time extend(): 0.015620946884155273

start = time.time()
l3 = [ x for lst in (l1, l2) for x in lst ]
stop = time.time()

print("Elapsed time list comprehension: " + str(stop - start))
# Elapsed time list comprehension: 0.11590242385864258

Я измерил The Start и Stop Timestams, чтобы рассчитать общее истеченное время для объединения двух списков 1 000 000 элементов каждый.

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

Резюме

Для объединения двух списков L1, L2, используйте l1.extend (l2) Метод, который является самым быстрым и наиболее читаемым.

Для объединения более двух списков используйте оператор распаковки [* l1, * l2, …, * ln] .

Хотите использовать свои навыки, чтобы создать жизнь вашей мечты, кодирующая из дома? Присоединяйтесь к My Python Freelancer Webinar и узнайте, как создать свой домашний кодирующий бизнес.

Нажмите: Как стать питоном фрилансером?

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/concatenate-lists-in-python/”