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

Python List Append () VS Extend ()

Глубокое понимание списков Python является фундаментальным для вашего образования Python. Сегодня я задавался вопросом: в чем разница между двумя из наиболее часто используемых методов списка: Append () против Extend ()? Я застрелил небольшое видео, объясняя разницу, и какой метод быстрее — вы можете сыграть его, как вы читаете по этому учебству: https://youtu.be/vgg8snj9kom Вот короткий … Python List Append () VS Extend () Более “

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

Глубокое понимание списков Python является фундаментальным для вашего образования Python. Сегодня я задавался вопросом: в чем разница между двумя из наиболее часто используемых Список методов : Добавить () против продлить () ?

Я застрелил небольшое видео, объясняя разницу, и какой метод быстрее – вы можете сыграть его, когда вы прочитали это руководство:

Вот краткий ответ – Добавить () против продлить () :

  • Метод list.append (x) Добавляет элемент x до конца список .
  • Метод list.extend (ИТЕР) Добавляет все элементы в елее до конца список .

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

Вы можете увидеть это в следующем примере:

>>> l = []
>>> l.append(1)
>>> l.append(2)
>>> l
[1, 2]
>>> l.extend([3, 4, 5])
>>> l
[1, 2, 3, 4, 5]

В коде вы впервые добавляете целочисленные элементы 1 и 2 в список, используя два вызова к Добавить () метод. (Если вам нужно более глубокое понимание, проверьте мою подробную статью о методе Append () в этом блоге.)

Затем вы используете метод Extend для добавления трех элементов 3, 4 и 5 в одном вызове продлить () метод.

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

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

Вот ваш бесплатный PDF чит-лист, показывающий вас все методы списка Python на одной простой странице. Нажмите на изображение, чтобы загрузить файл PDF с высоким разрешением, распечатать его и опубликовать его в свою офисную стену:

Какой метод быстрее – продлить () или добавить ()?

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

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

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

Затем я создал 100 списков с помощью методов, расширяющихся () и добавления (), с размерами от 10 000 элементов до 1000 000 элементов. В качестве элементов я просто увеличил целочисленные числа на один, начиная с 0.

Вот код, который я использовал для измерения и сюжета результатов: какой метод является быстрее – добавление () или расширяет ()?

import time


def list_by_append(n):
    '''Creates a list & appends n elements'''
    lst = []
    for i in range(n):
        lst.append(n)
    return lst


def list_by_extend(n):
    '''Creates a list & extends it with n elements'''
    lst = []
    lst.extend(range(n))
    return lst


# Compare runtime of both methods
list_sizes = [i * 10000 for i in range(100)]
append_runtimes = []
extend_runtimes = []

for size in list_sizes:

    # Get time stamps
    time_0 = time.time()
    list_by_append(size)
    time_1 = time.time()
    list_by_extend(size)
    time_2 = time.time()

    # Calculate runtimes
    append_runtimes.append((size, time_1 - time_0))
    extend_runtimes.append((size, time_2 - time_1))


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

append_runtimes = np.array(append_runtimes)
extend_runtimes = np.array(extend_runtimes)

print(append_runtimes)
print(extend_runtimes)

plt.plot(append_runtimes[:,0], append_runtimes[:,1], label='append()')
plt.plot(extend_runtimes[:,0], extend_runtimes[:,1], label='extend()')

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

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

Код состоит из трех частей высокого уровня:

  • В первой части вы определяете две функции list_by_append (n) и list_by_extend (n) которые принимают в качестве аргумента в качестве входного аргумента, размер целочисленного списка N и создавать списки последовательно увеличения целочисленных элементов, используя Добавить () и продлить () Методы соответственно.
  • Во второй части вы сравниваете время выполнения обеих функций, используя 100 различных значений для размера списка N Отказ
  • В третьей части, вы сюжете все, используя Python Библиотека Matplotlib Отказ

Вот результирующий график, который сравнивает время выполнения двух методов PROPEND () VS EXTEND (). На оси X вы можете увидеть размер списка от 0 до 1 000 000 элементов. На оси Y вы можете увидеть время выполнения в секундах, необходимых для выполнения соответствующих функций.

Полученный график показывает, что оба метода чрезвычайно быстры для нескольких десятков тысяч элементов. На самом деле, они настолько быстро, что Время () Функция модуль времени не может захватить прошедшее время.

Но, когда вы увеличиваете размер списков до сотен тысяч элементов, продлить () Метод начинает выиграть:

Для больших списков с одним миллионом элементов выполнение времени выполнения продлевать() Метод на 60% быстрее, чем время выполнения Приложение () метод.

Причина является уже упомянутой дозированием индивидуальных добавок.

Однако эффект воспроизводится только для очень больших списков. Для небольших списков вы можете выбрать любой метод. Ну, для ясности вашего кода, это все равно имеет смысл предпочтить продлить () над Добавить () Если вам нужно добавить кучу элементов, а не только один элемент.

Ваши навыки кодирования – какой следующий уровень?

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

Я создал бесплатный вебинар, который показывает вам, как я начал как Фрилансер Python после того, как мои науки, работающие из дома (и видишь, как мои дети растут), зарабатывая на полный рабочий день, работающий только неполный рабочий день.

Вебинар: Как стать шестью фигурой Python Freelancer?

Присоединяйтесь к 21,419 амбициозных кодеров Python. Это весело! 😄🐍.

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

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

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