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

Список Python Consatenation: Add (+) VS Explace Add (+ =) VS Extend ()

Дико популярная работа, которую вы найдете в любой (нетривиальной) базе кодовой базы, – это объединение списков – но есть несколько методов для этого. Мастер-кодера всегда выберет правильный метод для правильной проблемы. В этом руководстве показана разница между тремя методами к объединенным спискам: объединение двух списков с оператором +. Например, … Список Python Concatenation: Add (+) VS Explace Add (+ =) VS Extend () Подробнее »

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

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

В этом руководстве показана разница между тремя методами для объединения списков:

  • Объединить два списка с + оператор. Например, выражение [1, 2, 3] + [4, 5] Результаты в новом списке [1, 2, 3, 4, 5] Отказ Больше здесь.
  • Объединить два списка с + = оператор. Эта операция располагается, что означает, что вы не создаете новый список и результат выражения lst + = [4, 5] это добавить элементы справа на существующий список объектов lst Отказ Больше здесь.
  • Объединить два списка с продлить () Метод списков Python. Как + = Этот метод модифицирует существующий список на месте. Так что результат lst.extend ([4, 5]) Добавляет элементы 4 и 5 в список lst Отказ Больше здесь.

Подводя итоги: разница между + метод и то += а также продлевать() Методы заключаются в том, что первый создает новый список, и последний изменит существующий объект объекта списка.

Вы можете быстро сравнить те три метода в следующем интерактивном коде раковину:

Головоломка : Можете ли вы уже выяснить выходы этого кода-фрагмента?

Страх не если вы не можете! Я объясню вам каждый подробный пример дальше.

Метод 1: Добавить (+)

Стандартный способ добавления двух списков – использовать + Оператор такой:

# METHOD 1: ADD +
lst = ['Alice', 'Bob', 'Ann']
lst_new = lst + [42, 21]
print(lst)
print(lst_new)

Пока + Оператор является самым читаемым (особенно для кодеров для начинающих), это не лучший выбор в большинстве сценариев. Причина в том, что она создает новый список каждый раз, когда вы называете это. Это может стать очень медленным, и я видел много практических фрагментов кода, где структура данных списка используется с + Оператор – это узкое место всей алгоритм Отказ

В приведенном выше фрагменте кода вы создаете два Список объектов В памяти – даже если ваша цель, вероятно, просто обновить существующий список [«Алиса», «Боб», «Энн»] Отказ

Это может быть хорошо продемонстрировано в инструменте визуализации кода:

Просто удерживайте щелчок «Далее», пока в памяти вторым списком не появится.

Способ 2: Inplace Add (+ =)

+ = Оператор не совсем понятен Python сообщество. Многие из моих учеников ( Присоединяйтесь к нам бесплатно ) Верьте операцию Add lst + = [3, 4] просто коротко для lst + [3, 4] Отказ Это неправильно, и я продемонстрирую это в следующем примере:

# METHOD 2: INPLACE ADD +=
lst = ['Alice', 'Bob', 'Ann']
lst_old = lst
lst += [42, 21]
print(lst)
print(lst_old)

Опять же, вы можете визуализировать объекты памяти со следующим интерактивным инструментом (нажмите «Далее»):

Найдите, что + = Эксплуатация выполняет Iflace Add. Это изменяет существующий объект списка, а не создает новый. Это делает его более эффективным в большинстве случаев. Только если вам абсолютно необходимо создать новый список, вы должны использовать + оператор. Во всех других случаях вы должны использовать + = Оператор или Расширение () Метод Отказ

Говоря о которых…

Способ 3: продлить ()

Как предыдущий метод + = , list.extend (ИТЕРАЛИТЕ) Способ добавляет ряд элементов до конца списка. Метод Операторы на месте, поэтому новый объект списка не создан.

# METHOD 3: EXTEND()
lst = ['Alice', 'Bob', 'Ann']
lst_old = lst
lst.extend([42, 21])
print(lst)
print(lst_old)

Вот интерактивная визуализация памяти:

Нажмите «Далее» и исследуйте, как распределение памяти «разворачивается», поскольку выполнение продолжается.

Сравнение скорости

Поняв различия трех методов + против + = против продлить () Вы можете спросить: что такое Самый быстрый ?

Чтобы помочь вам понять, почему важно выбрать лучший метод, я выполнил подробный контроль скорости на моем ноутбуке INTEL I7 (8th Gen) (8 ГБ ОЗУ), объединяющих списки с увеличением размеров с использованием трех способов, описанных ранее.

Вот результат:

Сюжет показывает, что с увеличением размера списка разность выполнения между + Метод (метод 1) и + = и продлить () Методы (методы 2 и 3) становится все более очевидным. Первый создает новый список для каждой операции конкатенации – и это замедляет его.

Результат : Таким образом, оба метода в помещении + = и продлить () более чем на 30% быстрее, чем + Метод для конкатенации списка.

Вы можете воспроизвести результат со следующим фрагментом кода:

import time


# Compare runtime of three methods
list_sizes = [i * 300000 for i in range(40)]
runtimes_1 = [] # Method 1: + Operator
runtimes_2 = [] # Method 2: += Operator
runtimes_3 = [] # Method 3: extend()

for size in list_sizes:

    to_add = list(range(size))
    
    # Get time stamps
    time_0 = time.time()
    lst = [1]
    lst = lst + to_add
    time_1 = time.time()
    lst = [1]
    lst += to_add
    time_2 = time.time()
    lst = [1]
    lst.extend(to_add)
    time_3 = time.time()

    # Calculate runtimes
    runtimes_1.append((size, time_1 - time_0))
    runtimes_2.append((size, time_2 - time_1))
    runtimes_3.append((size, time_3 - time_2))


# Plot everything
import matplotlib.pyplot as plt
import numpy as np

runtimes_1 = np.array(runtimes_1)
runtimes_2 = np.array(runtimes_2)
runtimes_3 = np.array(runtimes_3)

print(runtimes_1)
print(runtimes_2)
print(runtimes_3)

plt.plot(runtimes_1[:,0], runtimes_1[:,1], label='Method 1: +')
plt.plot(runtimes_2[:,0], runtimes_2[:,1], label='Method 2: +=')
plt.plot(runtimes_3[:,0], runtimes_3[:,1], label='Method 3: extend()')

plt.xlabel('list size')
plt.ylabel('runtime (seconds)')

plt.legend()
plt.savefig('speed.jpg')
plt.show()

Если вам понравилось этот учебник, присоединяйтесь к моим бесплатным списке электронного адреса электронной почты, где я отправлю вам наиболее полную бесплатную академию электронной почты Python Right в вашем почтовом ящике.

Присоединяйтесь к сообществу Finxter сейчас!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

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

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

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