Дико популярная работа, которую вы найдете в любой (нетривиальной) базе кодовой базы, состоит в том, чтобы объединить списки, но есть несколько методов для достижения этого. Мастер-кодера всегда выберет правильный метод для правильной проблемы.
В этом руководстве показана разница между тремя методами для объединения списков:
- Объединить два списка с
+
оператор. Например, выражение[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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.