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

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

Самым важным типом данных сбора в Python является тип данных списка. Вы будете использовать списки в основном во всех ваших будущих проектах. Так что возьмите свое время и вложите хороший час или так тщательно изучить это руководство. Обзор – Создание списка в Python https://youtu.be/qxofngx0bqu Существует много способов создания списка в … Окончательное руководство по спискам Python Подробнее »

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

Самым важным типом данных сбора в Python является Список тип данных. Вы будете использовать списки в основном во всех ваших будущих проектах. Так что возьмите свое время и вложите хороший час или так тщательно изучить это руководство.

Обзор – Создание списка в Python

Есть много способов создания списка в Python. Давайте получим быстрый обзор в следующей таблице:

[] Квадратный кронштейн: инициализирует пустой список с нулевыми элементами. Вы можете добавить элементы позже.
[x1, x2, x3, …] Дисплей списка: инициализирует пустой список с элементами x1, x2, x3, … Например, [1, 2, 3] создает список с тремя целыми числами 1, 2 и 3.
[expr1, expr2, …] Дисплей списка с выражениями: инициализирует список с результатом выражений expr1, expr2, … Например, [1 + 1, 2-1] создает список [2, 1].
[expr для var в итера] Понимание списка: применяет экспресс эксплуатации к каждому элементу в утечку.
Список (потенциал) Список конструкторов, который принимает утечку в качестве ввода и возвращает новый список.

Вы можете играть с некоторыми примерами в нашей интерактивной оболочке Python:

Упражнение : Используйте список списков, чтобы создать список квадратных чисел.

Методы списка Python

lst.append (x) Добавляет элемент x в список lst.
lst.clear () Удаляет все элементы из списка LST-который становится пустым.
lst.copy () Возвращает копию списка LST. Копирует только список, а не элементы в списке (неглубокопия).
lst.count (x) Подсчитывает количество вхождений элемента x в списке lst.
lst.extend (ИТЕР) Добавляет все элементы ITERALABLE ITER (E.G. Еще один список) в список lst.
lst.index (x) Возвращает положение (индекс) первого вхождения значения x в списке lst.
lst.insert (i, x) Вставляет элемент X в положение (индекс) I в списке lst.
lst.pop () Удаляет и возвращает окончательный элемент списка LST.
lst.remove (x) Удаляет и возвращает первый вхождение элемента X в списке LST.
lst.reverse () Переверняет порядок элементов в списке lst.
list.sort () Сортирует элементы в списке lst в порядке возрастания.

Идите вперед и попробуйте методы списка Python сами:

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

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

Если вы внимательно изучили стол, вы узнаете наиболее важные способы списка в Python. Давайте посмотрим на несколько примеров вышеупомянутых методов:

>>> l = []
>>> l.append(2)
>>> l
[2]
>>> l.clear()
>>> l
[]
>>> l.append(2)
>>> l
[2]
>>> l.copy()
[2]
>>> l.count(2)
1
>>> l.extend([2,3,4])
>>> l
[2, 2, 3, 4]
>>> l.index(3)
2
>>> l.insert(2, 99)
>>> l
[2, 2, 99, 3, 4]
>>> l.pop()
4
>>> l.remove(2)
>>> l
[2, 99, 3]
>>> l.reverse()
>>> l
[3, 99, 2]
>>> l.sort()
>>> l
[2, 3, 99]

Шаги действий:

  • Мастер Python наборы (При примерах Гарри Поттера)
  • Мастер Словари Python (Ultimate Blog Tutorial)
  • Присоединяйтесь к моему Бесплатная электронная почтовая академия компьютера Для непрерывного улучшения в Python

Что такое сложность выполнения других методов списка Python?

Вот стол, основанная на Официальный Python Wiki :

Эксплуатация Средний случай Амортизированный худший случай
Копировать () На) На)
Приложение () O (1) O (1)
поп () O (1) O (1)
поп (я) Хорошо) Хорошо)
вставлять() На) На)
Список [я] O (1) O (1)
O (1) O (1)
Удалить (х) На) На)
Для меня в списке На) На)
Список [I: J] Хорошо) Хорошо)
del list [i: j] На) На)
O (k + n) O (k + n)
продлевать() Хорошо) Хорошо)
Сортировать() O (n log n) O (n log n)
[…] * 10 O (NK) O (NK)
х в Льсте На)
min (lst), max (lst) На)
ЛЕН (LST) O (1) O (1)

Список Python реализован с использованием массива C ++. Это означает, что обычно медленно изменяет элементы в начале каждого списка, потому что все элементы должны быть смещены вправо. Если вы добавите элемент в конец списка, он обычно быстро. Тем не менее, изменение размера массива может время от времени стать медленными, если для массива необходимо выделить больше памяти.

Списки нарезки Python

Нарезка – это специфическая для Python концепция для резки диапазона значений из типов последовательности, таких как списки или строки.

Попробуй сам:

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

Вот 10 минут видеоизображения этой статьи – это показывает вам все, что вам нужно знать о нарезке:

[Intermezzo] Основы индексации

Чтобы воплотить всех на той же странице, позвольте мне быстро объяснить индексы в Python. Предположим, у нас есть строковая «вселенная». Индексы – это просто позиции персонажей этой строки.

Показатель 0 1 2 3 4 5 6 7
Персонаж u n i v e r s e

Первый символ имеет индекс 0, второй символ имеет индекс 1, а i-й символ имеет индекс I-1.

Быстрое введение нарезки

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

Используйте нотацию кронштейна для нарезки с помощью идентификаторов старта и конечного положения. Например, Слово [I: J] Возвращает подстроку, начиная с индекса Я (включая) и заканчивая индекс J (Исключенный). Забыть, что конец индекса исключен, является общим источником ошибок.

Вы также можете пропустить идентификатор положения до или после нарезки толстой кишки. Это указывает на то, что среза начинается с первой или последней позиции соответственно. Например, Word [: I] + Word [I:] Возвращает ту же строку, что и слово Отказ

Python Puzzle 1: Какая вывод этого кода фрагмент?

x = 'universe'
print(x[2:4])

Размер шага в нарезке

Ради полноты, позвольте мне быстро объяснить продвинутую нотацию нарезки [Пуск: конец: шаг] Отказ Единственное отличие предыдущей записи – это то, что он позволяет вам также указать размер шага. Например, команда «Python» [: 5: 2] Возвращает каждый второй символ до четвертого символа, то есть строка «ВОМ» Отказ

Python Puzzle 2: Какой вывод этого кода фрагмент?

x = 'universe'
print(x[2::2])

Запрещенные индексы в срезах

Нарезка надежна, даже если конечный индекс стрелять над максимальным индексом последовательности. Просто помните, что ничего неожиданного не происходит, если нарезание превышенных последовательностей последовательности. Вот пример.

word = "galaxy" 
print(word[4:50]) 

Сводка нарезки Python

Короткий реконструкцию, нотация ломтика s [начало: конец: шаг] выклят подстроку из S Отказ Подстрока состоит из всех символов между двумя символами в индексе начала (включительно) и конечным индексом (эксклюзивным). Дополнительный размер шага указывает, сколько символов остается из исходной последовательности. Вот пример:

s = 'sunshine'
print(s[1:5:2])
#'us'
print(s[1:5:1])
#'unsh'

Хорошо, так что давайте немного нарезки нарезки. Решите следующую головоломку в голове (и проверьте решение ниже).

Python Puzzle 3: Какая вывод этого кода-фрагмента?

# (Shakespeare)
s = "All that glitters is not gold"
print(s[9:-9])
print(s[::10])
print(s[:-4:-1])

Давайте немного глубже в нарезю, чтобы убедиться, что вы получаете его на 100%.

Я искал квора, чтобы найти все маленькие проблемы, новые кодеры Python обращены с нарезкой. Я отвечу на шесть общих вопросов дальше.

1) Как пропустить показатели нарезки (например, [:: 2])?

Переводчик Python предполагает определенные значения по умолчанию для S [Старт: Стоп: Шаг] Отказ Они: Start = 0 , Стоп = Лен (ы) и Шаг = 1 (На срезе ломтика: s [::] == s [0: Len (ы): 1] ).

2) Когда использовать однокольскую оборотную оболочку (E.g. S [:]), а когда двойная обозначение двоеточия (например, a.g. s [:: 2])?

Одна толстая кишка (например, S [1: 2] ) позволяет двумя аргументам, начало и конец индекса. Двойная толстая кишка (например, s [1: 2: 2] ) позволяет третьим аргументам, индекс запуска, конце индекс и размер шага. Если размер шага установлен на значение 1 по умолчанию 1, мы можем использовать однокольскую обозначение для краткости.

3) Что означает отрицательный размер шага (например, [5: 1: -1])?

Это интересная особенность в Python. Размер отрицательного шага указывает, что мы не нарезаем слева направо, а справа налево. Следовательно, индекс запуска должен быть больше или равен, чем конечный индекс (в противном случае полученная последовательность пуста).

4) Какие индексы по умолчанию при использовании отрицательного размера шага (например, [:: – 1])?

В этом случае индексы по умолчанию не являются Start = 0 и end = len (s) Но наоборот: start = len (s) -1 и End = -1 Отказ Обратите внимание, что индекс запуска все еще включен, и конечный индекс по-прежнему исключен из среза. Из-за этого индекс конца по умолчанию –1, а не 0.

5) Мы видели много примеров для нарезки строк. Как работает список нарезки?

Нарезка работает то же самое для всех типов последовательностей. Для списков рассмотрим следующий пример:

l = [1, 2, 3, 4]
print(l[2:])
# [3, 4]

Крепежные кортежи работает аналогично.

6) Почему последний индекс исключен из ломтика?

Последний индекс исключается из-за двух причин. Первая причина – это согласованность языка, например Функция диапазона также не включает конец индекса. Вторая причина – ясность, например, вот пример, почему имеет смысл исключить конечный индекс с ломтика.

customer_name = 'Hubert'
k = 3 # maximal size of database entry
x = 1 # offset
db_name = customer_name[x:x+k]

Теперь предположим, что конечный индекс будет включен. В этом случае общая длина подстроки DB_Name будет K + 1 символы. Это было бы очень противоборбительным.

Давайте узнаем обо всех методах списка Python, начиная с одного из самых важных.

Список Python Append ()

Как вы можете добавить больше элементов в данный список? Используйте Добавить () Метод в Python. В этом руководстве показано вам все, что вам нужно знать, чтобы помочь вам овладеть необходимым методом наиболее фундаментального типа контейнера данных в языке программирования Python.

Определение и использование

list.append (x) Метод – в качестве имени предлагает-appends элемент х до конца Список Отказ

Вот краткий пример:

>>> l = []
>>> l.append(42)
>>> l
[42]
>>> l.append(21)
>>> l
[42, 21]

В первой строке примера вы создаете список л Отказ Затем вы добавите целочисленный элемент 42 до конца списка. Результатом является список с одним элементом [42] Отказ Наконец, вы добавляете целочисленный элемент 21 до конца этого списка, который приводит к списку двумя элементами [42, 21] Отказ

Синтаксис

Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.append (элемент)

Аргументы

элемент Объект, который вы хотите добавить в список.

Код головоломки

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

# Puzzle
nums = [1, 2, 3]
nums.append(nums[:])

print(len(nums))
# What's the output of this code snippet?

Вы можете проверить решение на Приложение Finxter Отказ (Я знаю, что это сложно!)

Примеры

Давайте погрузимся в несколько примеров:

>>> lst = [2, 3]
>>> lst.append(3)
>>> lst.append([1,2])
>>> lst.append((3,4))
>>> lst
[2, 3, 3, [1, 2], (3, 4)]

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

Список Python Append () в начале

Что, если вы хотите использовать метод Append () в начале: вы хотите «добавить» элемент непосредственно перед первым элементом списка.

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

Вот пример:

>>> lst = [1, 2, 3]
>>> lst.insert(0, 99)
>>> lst
[99, 1, 2, 3]

Вставить (я, х) Способ вставляет элемент х На позиции Я в списке. Таким образом, вы можете вставить элемент в каждую позицию в списке – даже в первой позиции. Обратите внимание, что если вы введете элемент в первую позицию, каждый последующий элемент будет перемещен на одну позицию. Другими словами, элемент Я Перейдет в положение Я + 1 Отказ

Список Python Добавить () несколько элементов

Но что, если вы хотите добавить не один, кроме нескольких элементов? Или даже все элементы данного потенциала. Можете ли вы сделать это с Добавить () ? Ну, давайте попробуем:

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

Ответ нет – вы не можете добавить несколько элементов в список Используя Добавить () Метод Отказ Но вы можете использовать другой метод: продлить () Метод:

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

Вы называете продлить () Метод на объекте списка. Это принимает счетчик в качестве входного аргумента. Затем он добавляет все элементы из-за того, что указано в списке, в порядке их возникновения.

Python List Append () VS Extend ()

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

Метод list.append (x) Добавляет элемент х до конца Список Отказ

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

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

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

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

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

Какой метод будет быстрее – расширяет () vs plapend ()?

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

Наш тезис в том, что продлить () Метод должен быть быстрее для более крупных размеров списка, потому что 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 List Append () VS INSERT ()

Разница между Добавить () и Вставить () Метод следующий:

  • Приложение (X) Метод добавляет новый элемент х до конца списка и
  • Вставить (я, х) Метод добавляет новый элемент х На позиции Я в списке. Он сдвигается все последующие элементы одно положение справа.

Вот пример, показывающий оба Добавить () и Вставить () Методы в действии:

>>> l = [1, 2, 3]
>>> l.append(99)
>>> l
[1, 2, 3, 99]
>>> l.insert(2, 42)
>>> l
[1, 2, 42, 3, 99]

Оба метода помогают вам добавлять новые элементы в список. Но вы можете спросить:

Что быстрее, добавьте () или вставить ()?

Все вещи равны, Добавить () Метод значительно быстрее, чем Вставить () метод.

Вот небольшой сценарий, который показывает, что Добавить () Метод имеет огромное преимущество производительности над Вставить () Метод при создании списка с 100 000 элементов.

import time

l1 = []
l2 = []

t1 = time.time()

for i in range(100000):
    l1.append(i)

t2 = time.time()

for i in range(100000):
    l2.insert(0,i)

t3 = time.time()


print("append(): " + str(t2 - t1) + " seconds")
print("insert(): " + str(t3 - t2) + " seconds")

# OUTPUT:
# append(): 0.015607357025146484 seconds
# insert(): 1.5420396327972412 seconds

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

Python List Append () VS ConcateNate

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

Это шесть способов объединения списков (здесь подробный учебник):

  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]
'''

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

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

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

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

Тем не менее, вам следует избегать использования метода Append () для конкатенации списка, потому что он не очень эффективен, ни краткий и читаемый.

Python List Append (), если не существует

Общий вопрос заключается в следующем:

Как вы можете добавить или добавить элемент в список, но только если он еще не существует в списке?

Если игнорируя любые проблемы с производительностью, ответ прост: используйте состояние, если в сочетании с операцией членства Элемент в списке и только Добавить () элемент, если результат – это Ложь Отказ В качестве альтернативы вы также можете использовать операцию отрицательной членства Элемент не в списке и добавить элемент, если результат – Правда Отказ

Пример : Скажем, вы хотите добавить все элементы от 0 до 9 в список трех элементов. Но вы не хотите дубликаты. Вот как вы можете сделать это:

lst = [1, 2, 3]
for element in range(10):
    if element not in lst:
        lst.append(element)	

Результирующий список:

[1, 2, 3, 0, 4, 5, 6, 7, 8, 9]

Вы добавляете все элементы от 0 до 9 в список, но только если они еще не присутствуют. Таким образом, полученный список не содержит дубликатов.

Но есть проблема: этот метод очень неэффективен!

В каждой итерации петли фрагмент Элемент не в LST Ищется весь список для текущего элемент Отказ Для списка с N Элементы, это результаты в N Сравнение, на итерацию. Как у вас есть N Итерации, сложность выполнения данного фрагмента кода является квадратичным в количестве элементов.

Вы можете сделать лучше?

Конечно, но вам нужно смотреть за пределы типа данных списка: Наборы Python здесь правильная абстракция. Если вам нужно обновить ваше основное понимание заданного типа данных, ознакомьтесь с моим подробным учебным пособием (с примерами Harry Potter) в блоге Finxter.

Почему Python отлично подходит для этого? Потому что они не позволяют никаких дубликатов на дизайн: Набор – это Уникальный Коллекция неупорядоченных элементов Отказ И Сложность времени выполнения Операции членства не является линейным в количестве элементов (как это дело для списков), но постоянные!

Пример : Скажем, вы хотите добавить все элементы от 0 до 9 до набора трех элементов. Но вы не хотите дубликаты. Вот как вы можете сделать это с наборами:

s = {1, 2, 3}
for element in range(10):
    s.add(element)

print(s)

Полученный набор:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Набор не позволяет дублировать записи, чтобы элементы 1, 2 и 3 не добавляются дважды на множество.

Вы даже можете сделать этот код более лаконичным:

s = {1, 2, 3}
s = s.union(range(10))

print(s)

Выход:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Метод Union создает новый набор, который состоит из всех элементов в обеих операндах.

Теперь вы можете захотеть иметь список в результате, а не набор. Решение простое: преобразуйте результирующий набор в список, используя Список (набор) Метод преобразования. Это имеет линейную сложность выполнения, и если вы называете его только один раз, он не изменяет общую сложность выполнения кодового фрагмента (он остается линейным в количестве заданных элементов).

Проблема: Что, если вы хотите сохранить информацию о заказе и до сих пор добавлять все элементы, которые еще не в списке?

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

lst = [1, 2, 3]
s = set(lst)

for element in range(10):
    if element not in s:
        s.add(element)
        lst.append(element)
        
print(lst)

Результирующий список:

[1, 2, 3, 0, 4, 5, 6, 7, 8, 9]

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

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

Python List Append () Вернуть новый список

Если вы используете lst.append (элемент) Операция, вы добавляете элемент в существующий список lst Отказ Но что, если вы хотите создать новый список, где элемент был добавлен?

Ответ просто использовать Список конкатенации Операция lst + [элемент] который создает новый список каждый раз, когда он используется. Оригинальный список lst не будет затронута операцией конкатенации списка.

Вот пример, который показывает, что метод Append () изменяет только существующий список:

>>> lst_1 = [1, 2, 3]
>>> lst_2 = lst_1.append(4)
>>> lst_1
[1, 2, 3, 4]

И вот пример, который показывает, как создать новый список, как вы добавляете новый элемент 4 в список:

>>> lst_3 = [1, 2, 3]
>>> lst_4 = lst_3 + [4]
>>> lst_3
[1, 2, 3]

Используя операцию конкатенации списка, вы можете создать новый список, а не добавлять элемент в существующий список.

Список Python Добавить () Сложность, память и эффективность

Сложность времени: Добавить () Метод имеет постоянный Сложность времени O (1). Добавление одного элемента в список требуется только постоянное количество операций – независимо от размера списка.

Космическая сложность: Добавить () Метод имеет постоянную космическую сложность O (1). Сама операция нуждается только в постоянном количестве байтов для вовлеченных временных переменных. Настройка памяти не зависит от размера списка. Обратите внимание, что сам список имеет линейную сложность пространства: вам нужно o (n) байты для представления n элементов в списке.

Эффективность соображений: Добавить () Метод максимально эффективно. С точки зрения асимптотического поведения временной сложности, нет способа улучшить Добавить () Метод – даже если вы используете другие структуры данных, такие как наборы или Двоичные деревья Отказ Однако, если вам нужно добавить несколько элементов в список, вы можете получить некоторые улучшения постоянного фактора, используя метод Extend (), а не метод Append (). Первый принимает утечку как аргумент, поэтому вы можете добавить много элементов одновременно в одну партию. Это более эффективно и может привести к улучшениям производительности 50% в практических настройках. Если вы заинтересованы в самых исполнительных способах добавления нескольких элементов в список, вы можете увидеть обширные тесты производительности в этом руководстве в блоге Finxter.

Список Python Append () по индексу

Вы хотите добавить элемент в определенной позиции? Это называется вставкой, и вы можете сделать это с list.insert (i, x) Метод, который вставляет элемент х На позиции Я из Список Отказ Все последующие элементы будут смещены вправо (их индекс увеличивается на один). Сложность времени Вставить () Метод o (1).

Вот пример:

>>> lst = [99, 42, 101]
>>> lst.insert(2, 7)
>>> lst
[99, 42, 7, 101]

Код вставляет элемент 7 в положении 2 списка. Элемент 101 Ранее проводил позицию 2, поэтому теперь он содержит позицию 3.

Если вы хотите вставить элемент и создать новый список, я рекомендую использовать нарезку Python. Ознакомьтесь с этим углубленным руководством блога, который покажет вам все, что вам нужно знать о нарезке. Вы также можете получить бесплатную нарегующую книгу «Нарезание для кофе-брейки Python».

Вот код, который показывает, как создать новый список после вставки элемента в определенную позицию:

>>> lst = [33, 44, 55]
>>> lst[:2] + [99] + lst[2:]
[33, 44, 99, 55]

Опять же, вы используете Список конкатенации Чтобы создать новый список с элементом 99, вставленных в положение 2. Обратите внимание, что операции нарезки lst [: 2] и lst [2:] Создайте свою собственную неглубокую копию списка.

Python List Append () ошибка

На самом деле, нет много вещей, которые вы можете сделать не так, используя Добавить () метод.

1) Одной из них происходит одна общая ошибка, когда вы предполагаете, что Добавить () Метод создает новый список. Это не так: нет возврата для Добавить () метод. Это просто добавляет элемент в существующий список.

2) Другая ошибка может произойти, если вы попытаетесь добавить элемент в список, но список еще не создан. Конечно, вы можете позвонить только методу, если вы правильно инициализировали объект списка.

3) Еще одна ошибка случается, если вы пытаетесь использовать Добавить () Способ с слишком многими аргументами. Добавить () Метод принимает только один аргумент: элемент, который будет добавлен. Если вы добавите еще один аргумент (например, позиция, на котором вы хотите добавить элемент), вы получите ошибку. Другие методы, такие как Вставить () Метод может обрабатывать больше аргументов, таких как положение, чтобы добавить элемент.

Список Python Добавить () Пустой элемент

Хотите добавить пустой элемент в список, чтобы получить что-то подобное: [4, 5, 7] ? Я видел это в Stackoverflow Вопрос при исследовании этой статьи.

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

Вот пример:

>>> lst = [4, 5]
>>> lst.append(None)
>>> lst.append(7)
>>> lst
[4, 5, None, 7]

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

Список Python Append () отсортирован

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

Вместо этого вы можете использовать двоичный поиск и list.insert (i, x) Способ вставить элемент х На позиции Я в списке. Вот код для двоичного алгоритма поиска в Python:

def binary_search(lst, value):
    lo, hi = 0, len(lst)-1
    while lo <= hi:
        mid = (lo + hi) // 2
        if lst[mid] < value:
            lo = mid + 1
        elif value < lst[mid]:
            hi = mid - 1
        else:
            return mid
    return -1

    
l = [3, 6, 14, 16, 33, 55, 56, 89]
x = 56
print(binary_search(l,x))
# 6 (the index of the found element)

Пожалуйста, найдите более подробное обсуждение алгоритма двоичного поиска в моем руководстве по блоге Finxter.

Python List Append () словарь

Это различные интерпретации использования метода Append () с помощью словаря:

  • Добавьте словарь в список.
  • Добавьте все пары ключевых ценностей из словаря в список.
  • Добавьте элемент в список, хранящуюся в словаре.
  • Добавить/добавить пару элемента ключевое значение в словарь.

Давайте рассмотрим их один за другим:

Добавьте словарь в список. Словарь – это объект Python. Таким образом, вы можете просто добавить его в список, как вы бы любой другой элемент:

>>> dic = {"hello": 0, "world":1}
>>> lst = [1, 2, 3]
>>> lst.append(dic)
>>> lst
[1, 2, 3, {'hello': 0, 'world': 1}]

Элемент четвертого списка – это сам словарь.

Добавьте все пары ключевых ценностей из словаря в список. Скажи, у тебя есть словарь с (ключ, значение) Пары. Как вы можете добавить все их в данный список? Ответ прост: используйте продлить () Метод с методом словаря Предметы () Отказ

>>> income = {"Alice": 100000, "Bob": 44000}
>>> lst = [("Carl", 22000)]
>>> lst.extend(income.items())
>>> lst
[('Carl', 22000), ('Alice', 100000), ('Bob', 44000)]

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

Добавьте элемент в список, хранящуюся в словаре. Этот простой: извлеките список и вызовите Добавить () Метод на нем. Вот как:

>>> teams = {"A" : ["Alice", "Anna"], "B" : ["Bob", "Bernd"]}
>>> teams["A"].append("Atilla")
>>> teams["A"]
['Alice', 'Anna', 'Atilla']

Поскольку список является объектом, изменив этот объект (даже если это «снаружи» словарь), повлияет на объект, хранящийся в самом словаре.

Добавить/добавить пару элемента ключевое значение в словарь. Как вы можете добавить (ключ, значение) Пара в словарь? Просто используйте операцию Дик [КЛЮЧ] Отказ

Список Python Append () для петли одна строка

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

Вот быстрый пример, чтобы добавить все элементы от 0 до 9 в список:

>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Резюме

list.append (x) Метод добавляет элемент х до конца Список Отказ

Список Python Clear ()

Удивительно, даже продвинутые кодеры Python не знают о Очистить () Метод списков Python. Время изменить это!

Определение и использование : list.clear () Способ удаляет все элементы из существующего Список Отказ Список снова становится пустым.

Вот краткий пример:

>>> lst = [1, 2, 3, 4, 5]
>>> lst.clear()
>>> lst
[]

В первой строке вы создаете список lst состоящий из пяти целых чисел. Затем вы удалите все элементы из списка. Результатом является пустой список.

Головоломка – попробуйте сами:

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.clear ()

Аргументы: Метод не имеет никакого аргумента.

Возвращаемое значение: Метод list.clear () имеет возврат ценности Нет Отказ Он работает в существующем списке и, следовательно, не возвращает новый список с удаленным элементом

Видео:

Список Python Clear () VS Новый список

Теперь, если вы являетесь рекламой Alert, вы можете задать следующий интересный вопрос: зачем использовать метод CLEAR () в первую очередь, когда вы также можете просто создать новый список и сделать с ним?

Вот пример, где оба пути приводят к одному и тому же результату:

>>> lst = [1, 2, 3]
>>> lst.clear()
>>> lst
[]
>>> lst = [1, 2, 3]
>>> lst = []
>>> lst
[]

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

Однако Python является объектно-ориентированным языком. И если вы просто создаете новый объект и назначаете его переменной, исходный список все еще существует в памяти. И другие переменные могут указывать на объект.

Рассмотрим следующий фрагмент кода, который применяет это:

lst = [1, 2, 3]
lst_2 = lst
lst = []
print(lst_2)
# [1, 2, 3]

Я создал визуализацию Python для вас, чтобы вы могли видеть объекты в памяти:

Просто назначить новый список для переменной lst оставит другую переменную lst_2 Независимо. Вместо этого вы должны были использовать lst.clear (), чтобы убедиться, что обе переменные теперь указывают на тот же пустой объект списка.

lst = [1, 2, 3]
lst_2 = lst
lst.clear()
print(lst_2)
# []

Список Python Clear () память

Эффект Очистить () Способ заключается в том, что список теперь пусто.

Теоретически вы выпустили виртуальную машину Python от бремени хранения элементов в памяти. Python использует Ссылка подсчет Чтобы определить, если некоторые элементы в памяти больше не ссылаются (и, таким образом, можно считать неиспользованным). Эти элементы будут удалены – мы говорим, они освобождены из памяти. Если вы очистите список, вы по существу вы удалите все ссылки из списка в элементы списка. Тем не менее, некоторые старые элементы списка могут по-прежнему упоминаться извне (например, другой переменной). Таким образом, они не обязательно удаляются, потому что они все еще могут быть необходимы! Просто держите это в виду, когда очистите список.

На практике, однако, даже ссылочные элементы все еще могут существовать в памяти до Сборщик мусора Python (или даже операционная система) удаляет элементы из памяти.

Список Python Clear () сложность

Сложность времени выполнения list.clear () это O (n) Для списка с N элементы. Почему? Ну, вам сначала нужно понять, что произойдет, если вы удалите все элементы из списка. Список элементов не физически (или, для этого, в цифровом виде) хранится в списке. Список содержит только ссылки на объекты элементов реального списка в памяти. Если вы очистите список, вы удалите все эти ссылки.

Мусорный коллектор В Python проходит все элементы в памяти, чтобы удалить те, которые имеют ссылочный счетчик нуля. Почему? Потому что они являются теми, которые не могут быть доступны в коде. Таким образом, сборщик мусора может благополучно предположить, что они не используются и больше не нужны. Как видите, сборщик мусора нуждается в информации о ссылке для каждого элемента в памяти.

Алгоритм при очистке списка прост: Уменьшите ссылочное значение каждого объекта элемента каждого списка на один Отказ Объекты, которые в конечном итоге со ссылкой с нулем, теперь могут быть удалены из памяти. Но, как вам нужно перейти на все элементы списка элементов, сложность выполнения является линейным до размера списка.

Список Python Clear () не работает

Python list.clear () Способ добавляли в Python 3.3 ( Официальный источник ). Поэтому, если вы попытаетесь использовать его для любой версии Python до этого, вы должны использовать del list [:] Способ, который семантически эквивалентен и работает для более ранних версий Python.

Сопутствующие статьи на блоге Finxter:

  • Как проверить вашу версию Python?

Список Python Clear () Версия 2.7

Вы пытались использовать Python list.clear () В Python 2.7? Это невозможно. Очистить () Способ добавляли в Python 3.3 ( Официальный источник ). Поэтому, если вы попытаетесь использовать его для любой версии Python до этого (включая 2.7), вы должны использовать del list [:] Способ, который семантически эквивалентен и работает для более ранних версий Python.

Сопутствующие статьи на блоге Finxter:

  • Как проверить вашу версию Python?

Список Python Clear () vs del

Вы можете спросить: в чем разница между list.clear () метод и то дель Операция?

Ответ прост: нет никакой семантической разницы. То list.clear () Метод просто синтаксический сахар для del list [:] ( источник ).

Вот пример, демонстрирующий, что оба на самом деле такие же:

>>> lst = [1, 2, 3]
>>> lst.clear()
>>> lst
[]
>>> lst = [1, 2, 3]
>>> del lst[:]
>>> lst
[]

Список удаления альтернатив

Есть несколько альтернативных методов списка для удаления элементов из списка. Смотрите таблицу обзора:

lst.remove (x) Удалите элемент из списка (по значению)
lst.pop () Удалите элемент из списка (по индексу) и верните элемент
lst.clear () Удалите все элементы из списка
del lst [3] Удалите один или несколько элементов из списка (по индексу или ломтию)
Список понимания Удалите все элементы, которые соответствуют определенному условию

Python List Четкие дубликаты

Как удалить все дубликаты данного значения в списке?

Наивный подход – пройти каждый элемент и проверять, существует ли этот элемент в списке. Если это так, удалите его. Однако это требует нескольких строк кода.

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

В качестве значений словаря вы просто принимаете фиктивные значения (по умолчанию).

Связанные статьи в блоге:

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

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

Вот код:

>>> lst = [1, 1, 1, 3, 2, 5, 5, 2]
>>> dic = dict.fromkeys(lst)
>>> dic
{1: None, 3: None, 2: None, 5: None}
>>> duplicate_free = list(dic)
>>> duplicate_free
[1, 3, 2, 5]

Резюме

list.clear () Способ удаляет все элементы из Список Отказ

Список Python Copy ()

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

Определение и использование: list.copy () метод копий все список элементы в новый список. Новый список – это возвращаемое значение метода. Это неглубокая копия – вы копируете только ссылки на объект на элементы списка, а не сами объекты.

Вот краткий пример:

>>> lst = [1, 2, 3]
>>> lst.copy()
[1, 2, 3]

В первой строке вы создаете список lst состоящий из трех целых чисел. Затем вы создаете новый список, скопировав все элементы.

Головоломка – попробуйте сами:

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.copy ()

Аргументы: Метод не имеет никакого аргумента.

Возвращаемое значение: Метод list.clear () Возвращает Список Объект, копируя ссылки на все объекты в исходном списке.

Видео:

Список Python Copy

Прежде чем вы действительно можете понять Копировать () Способ в Python, вы должны понимать концепцию «мелкой копии».

На объектно-ориентированных языках, таких как Python, все – это объект. Список – это объект, а элементы в списке тоже объекты. Неглубокая копия списка создает новый объект списка – копия – но она не создает новых элементов списка, но просто копирует ссылки на эти объекты.

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

В Python, list.copy () Способ производит только мелкую копию, которая имеет гораздо более быструю сложность выполнения.

Вот пример, показывающий точный этот сценарий:

>>> lst = [6, 7, [1, 2], "hello"]
>>> lst_2 = lst.copy()
>>> lst_2[2].append(42)
>>> lst[2]
[1, 2, 42]

Изменение третьего элемента списка скопированного списка влияет на элемент третьего списка исходного списка.

Список Python Скопируйте глубокий

Поняв концепцию неглубокой копии, теперь легко понять концепцию глубокой копии. Неглубокая копия копирует ссылки на элементы списка. Глубокая копия копирует сами элементы списка, которые могут привести к высокому рекурсивному поведению, потому что элементы списка могут быть спискими самими собой, которые необходимо скопировать глубоко и так далее.

Вот простая глубокая копия того же списка, как показано ранее:

В отличие от мелкой копии, список [1, 2] копируется отдельно для глубокого списка копирования. Если один изменяет этот вложенный список в исходном списке, изменение не будет видно в глубокой копии. (Потому что вложенный список глубокого списка копирования является независимым объектом в памяти.)

Обратите внимание, что в глубокой копии строковый объект не должен быть скопирован. Почему? Поскольку строки неизменяются, поэтому вы не можете их изменить (и, таким образом, не будут грязных «побочных эффектов», видимых другими копиями списка, указывающих на тот же объект в памяти.

Чтобы получить глубокую копию в Python, используйте Копировать модуль и использовать Deepcopy () Метод:

>>> import copy
>>> lst = [6, 7, [1, 2], "hello"]
>>> lst_2 = copy.deepcopy(lst)
>>> lst_2[2].append(42)
>>> lst[2]
[1, 2]

Как скопировать список Python (альтернативы)?

Скажи, вы хотите скопировать Список Отказ Какие варианты есть?

list.copy () Возвращает неглубокую копию списка.
Import Copy Copy.deepcopy (список) Импортируйте модуль копирования и использует его способ для создания глубокой копии списка.
список[:] Используйте Slicing с индексами по умолчанию для создания неглубокой копии списка.
Список (х) Используйте список встроенного списка (…), чтобы создать неглубокую копию списка X.
[EL для EL в LST] Используйте список пометков для создания неглубокой копии исходного списка LST.

Нарезка относится к самым быстрым методам (очень грязные эталон здесь ). Если вам нужно обновить навыки нарезки Python, вот учебник по блогу Finxter:

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

  • Введение в нарезку в Python

Копия списка Python не работает

Основная причина, почему list.copy () Способ может не работать для вас, потому что вы предполагаете, что он создает глубокую копию, когда на самом деле он создает только неглубокую копию списка. Чтобы создать глубокую копию, где сами элементы списка копируются (например, для многомерных списков), просто импортируйте Скопировать Модуль и использовать его метод Deepcopy (X) Чтобы скопировать список х Отказ

>>> import copy
>>> lst = [[1, 2], 3, 4]
>>> lst_2 = copy.deepcopy(lst)

Список питона Скопируйте и добавьте

Как скопировать список и добавить элемент в одной строке кода Python?

Просто используйте нарезку, чтобы скопировать список и Список конкатенации Оператор + Чтобы добавить список одного элемента [x] к результату. Но тоже есть и другие хорошие способы. Проверьте следующие способы добавления элемента х до указанного списка lst и вернуть результат как копию:

  • lst [:] + [x]
  • lst.copy () + [x]
  • [* lst, x]

Третий способ скопировать список и добавление нового элемента – мой личный фаворит, потому что это быстро, легко читается и кратко. Он использует оператор Asterisk для распадания элементов исходного списка в новый список.

Список Python Copy по значению

Вы хотите скопировать все элементы в вашем списке «по значению»? Другими словами, вы хотите не только объект «Список» (неглубокую копию), но и элементы списка (глубокая копия).

Это можно сделать с Deepcopy () Метод Python Скопировать библиотека. Вот пример:

>>> import copy
>>> lst = [6, 7, [1, 2], "hello"]
>>> lst_2 = copy.deepcopy(lst)
>>> lst_2[2].append(42)
>>> lst[2]
[1, 2]

Элемент 42 не был добавлен в вложенный список lst Отказ

Список питона копия с ломтиком

Вы можете просто скопировать список lst Используя операцию ломтика lst [:] С начать и остановить индексы запуска по умолчанию, чтобы все элементы скопированы в списке. Это создает неглубокую копию списка lst Отказ

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

  • Введение в нарезку в Python

Список списка Python без первого элемента

Чтобы скопировать список без своего первого элемента, просто используйте нарезку Список [1:] Отказ Установив индекс запуска до 1, все элементы с указателем больше или равны 1, скопированы в новый список.

Вот пример:

>>> lst = [1, 2, 3, 4]
>>> lst[1:]
[2, 3, 4]

Список Python Copy без последнего элемента

Чтобы скопировать список без последнего элемента, просто используйте нарезку Список [: - 1] Отказ Установив индекс запуска до -1 (элемент списка правого списка) все элементы, но последний копируется в новый список.

Вот пример:

>>> lst = [1, 2, 3, 4]
>>> lst[:-1]
[1, 2, 3]

Список копирования списка Python

Сложность с временем неглубокого списка копировании-примеры являются list.copy () или нарезки Список [:] – линейный на количество элементов в списке. Для N элементов списка «Сложность времени» является O (n). Почему? Поскольку Python переходит на все элементы в списке и добавляет копию ссылки на объект на новый список (копирование по ссылке).

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

import matplotlib.pyplot as plt
import time

y = []
for i in [100000 * j for j in range(10)]:
    lst = list(range(i))
    t0 = time.time()
    lst_2 = lst[:]
    t1 = time.time()
    y.append(t1-t0)


plt.plot(y)
plt.xlabel("List elements (10**5)")
plt.ylabel("Time (sec)")
plt.show()

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

Время выполнения вырастает линейно в количестве элементов списка.

Список Python копирует частично

Как скопировать список частично? Копировать только элементы между Начать Индекс (включен) и Стоп Индекс (исключен), используйте Slicing, как это: Список [Пуск: Стоп] Отказ Это приводит к новому списку, который содержит только части списка.

Список Python Копировать многомерный список

Чтобы скопировать многомерный список (список списков), вам необходимо создать глубокую копию. Вы можете выполнить это с помощью метода deepcopy () библиотеки копирования следующим образом:

>>> import copy
>>> lst = [[1, 2, 3], [4, 5, 6]]
>>> lst_2 = copy.deepcopy(lst)
>>> lst_2
[[1, 2, 3], [4, 5, 6]]

Теперь проверьте, действительно ли копия глубокая, очищая элемент первого списка в копию:

>>> lst_2[0].clear()
>>> lst
[[1, 2, 3], [4, 5, 6]]
>>> lst_2
[[], [4, 5, 6]]

Вы можете увидеть, что копия была действительно глубокой, потому что первый элемент lst не пострадал от Очистить () Метод которые удалили все элементы для глубокой копии lst_2 Отказ

Резюме

list.copy () Метод создает неглубокую копию Список Отказ copy.deepcopy (список) Метод создает глубокую копию Список Отказ

Список списка Python ()

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

Определение и использование :

То list.count (x) Способ подсчитывает количество вхождений элемента x в список .

Вот краткий пример:

>>> lst = [1, 2, 42, 2, 1, 42, 42]
>>> lst.count(42)
3
>>> lst.count(2)
2

В первой строке примера вы создаете список lst Отказ Затем вы подсчитаете количество раз целых значений 42 и 2 в списке.

Код головоломки – попробуйте сами:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

Вы также можете решить эту головоломку и отслеживать свои навыки Python на нашем интерактивном приложении Finxter.

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python ( Python Versions 2.x и 3.x ). Вот синтаксис:

list.Count (значение)

Аргументы:

стоимость Подсчитывает количество вхождений стоимости в списке. В списке появляется значение, если оператор == возвращает true.

Возвращаемое значение: Метод list.Count (значение) Возвращает целочисленное значение, установленное в число раз аргумент ценность появляется в списке. Если значение не отображается в списке, возвращаемое значение равно 0.

Связанная статья: Python Regex SuperPower – Ultimate Guide

Список списка Python

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

>>> [42, 42, 1, 2, 3, 42, 1, 3].count(42)
3

Значение 42 появляется три раза в списке.

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

Вот пример:

>>> lst = [[1,1], [1,1], (1,1), 42, 1]
>>> lst.count([1,1])
2

Список верхнего уровня относится к двум независимым объектам списка [1, 1] в памяти. Тем не менее, если вы подсчитаете количество вхождений третьего списка [1, 1] , метод правильно определяет, что оно выглядит два раза. Это потому, что два элемента списка равны списку [1, 1] Отказ

Обратите внимание, что значения х и y считаются равными, если х == y Отказ Вы можете увидеть это для целочисленных списков в следующем примере:

>>> lst_1 = [1, 1]
>>> lst_2 = [1, 1]
>>> lst_1 == lst_2
True

Подводя итоги, list.Count (значение) Способ подсчитывает количество раз, когда элемент списка равен значения (с помощью сравнения == ). Вот эталонная реализация:

def count(lst, value):
    ''' Returns the number of times
    a list element is equal to value'''

    count = 0
    for element in lst:
        count += element == value

    return count


lst = [1, 1, 1, 1, 2]

print(lst.count(1))
# 4

print(lst.count(2))
# 1

print(lst.count(3))
# 0

(Обратите внимание, что это не реальный Cpython. реализация. Это просто семантически эквивалентная реализация list.Count (значение) Метод для образовательных целей.)

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

  • Методы списка Python – простой обзор
  • Как начать изучать Python?

Сложность списка Python

Сложность времени из Счет (значение) Метод o (n) для списка с n элементов. Стандартная реализация Python Cpython «касается всех элементов в исходном списке, чтобы проверить, равны ли они значением.

Опять же, посмотрите на справочную реализацию, где вы можете увидеть эти операции сравнения элемент В коде:

def count(lst, value):
    count = 0
    for element in lst:
        count += element == value
    return count

Таким образом, момент сложности является линейным в количестве элементов списка.

Вы можете увидеть участок времени сложности count () Метод растущего размера списка здесь:

На рисунке показано, как прошедшее время подсчета фиктивного элемента -99 в списках с растущим числом элементов растет линейным на количество элементов.

Если вы заинтересованы в коде, я использовал для генерации этого участка MATPLOTLIB, это он:

import matplotlib.pyplot as plt
import time

y = []
for i in [100000 * j for j in range(10,100)]:
    lst = list(range(i))
    t0 = time.time()
    x = lst.count(-99)
    t1 = time.time()
    y.append(t1-t0)


plt.plot(y)
plt.xlabel("List elements (10**5)")
plt.ylabel("Time (sec)")
plt.show()

Список Python Count Дубликаты

Как вы можете рассчитывать на количество дубликатов в данном списке?

Проблема : Давайте рассмотрим элемент дубликата, если оно появляется как минимум два раза в списке. Например, список [1, 1, 1, 2, 2, 3] имеет два дубликата 1 и 2 Отказ

Решение : Вы создаете Пустой набор дубликаты. Затем вы хотите по поводу исходного списка и добавить каждый элемент на набор, который имеет значение счета по меньшей мере 2.

Вот код:

def find_dups(lst):
    dups = set()
    for el in lst:
        if lst.count(el)>1:
            dups.add(el)
    return dups

print(find_dups([1, 1, 1, 2, 2, 3]))
# {1, 2}

print(find_dups(["Alice", "Bob", "Alice"]))
# {'Alice'}

print(find_dups([1, 2, 3]))
# set()

Обратите внимание, что этот алгоритм имеет квадратичную сложность времени, потому что для каждого элемента в списке необходимо подсчитать количество раз, когда он появляется в списке – каждая из этих операций счета имеет линейную сложность времени.

Связанная статья:

  • Введение в комплекты в Python (примеры Гарри Поттера) 😉

Список Python считает уникальные значения и строки

Как вы можете посчитать Количество уникальных значений (или строки) в данном списке?

Проблема : Значение считается уникальным, если оно появляется только один раз в списке.

Решение : Вы считаете каждый элемент В списке и взять только те, с помощью list.count (элемент) Отказ

Вот код:

def find_uniques(lst):
    uniques = set()
    for el in lst:
        if lst.count(el) == 1:
            uniques.add(el)
    return uniques


print(find_uniques([1, 1, 2, 3, 3]))
# {2}

print(find_uniques(["Alice", "Bob", "Alice"]))
# {'Bob'}

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

Список Python подсчитывает все элементы (количество для Dict)

Как вы можете посчитать все элементы в списке и хранить результат в словаре?

Проблема : Preen это список. Вы хотите сосчитать каждый элемент в списке. Затем вы хотите сохранить результат в словаре, отображающий элементы на их частоты внешнего вида (счетчиков). Например, список [1, 1, 2, 2, 3] должен привести к словарю {1: 2, 2: 2, 3: 1} Отказ

Решение : Вы решаете эту проблему, используя Словарь понимание Отказ Ключ – это элемент списка, а значение является частотой этого элемента в списке. Вы используете count () Способ сделать это.

Вот код:

def count_to_dict(lst):
    return {k:lst.count(k) for k in lst}


print(count_to_dict(["Alice", "Bob", "Ann", "Alice", "Charles"]))
# {'Alice': 2, 'Bob': 1, 'Ann': 1, 'Charles': 1}

print(count_to_dict([1, 1, 1, 2, 2, 3]))
# {1: 3, 2: 2, 3: 1}

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

Связанная статья:

  • Ultimate Guide к словари в Python

Список Python Count с условием

Как вы можете подсчитать элементы при определенном состоянии в Python? Например, что, если вы хотите посчитать все четные значения в списке? Или все простые номера? Или все строки, которые начинаются с определенного персонажа? Есть несколько способов выполнить это, давайте обсудим их один за другим.

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

def condition(x):
    return x > 10


print(condition(10))
# False

print(condition(2))
# False

print(condition(11))
# True

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

Список Python считай, если

Как вы можете посчитать элементы списка, если условие будет выполнено?

Ответ должен использовать простой выражение генератора сумма (условие (x) для x в lst) :

>>> def condition(x):
	return x>10

>>> lst = [10, 11, 42, 1, 2, 3]
>>> sum(condition(x) for x in lst)
2

Результат указывает на то, что есть два элемента, которые больше 10. Вы использовали выражение генератора, которое возвращает итератор логии. Обратите внимание, что логический Правда представлено целочисленным значением 1 и логией Ложь Представляется целочисленным значением 0. Вот почему вы можете просто рассчитать сумму по всем лоянам, чтобы получить количество элементов, для которых удерживается состояние.

Список Python считается больше/меньше

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

>>> def condition(x):
	return x>10

>>> lst = [10, 11, 42, 1, 2, 3]
>>> sum(condition(x) for x in lst)
2

Например, чтобы найти количество элементов, меньше 5, используйте условие X <5 в выражении генератора:

>>> lst = [10, 11, 42, 1, 2, 3]
>>> sum(x<5 for x in lst)
3

Список Python Count Zero/ненулевой

Чтобы подсчитать количество нулей в данном списке, используйте list.Count (0) Способ вызова.

Чтобы подсчитать количество нешен в данном списке, вы должны использовать Условный подсчет Как обсуждалось ранее:

def condition(x):
    return x!=0

lst = [10, 11, 42, 1, 2, 0, 0, 0]
print(sum(condition(x) for x in lst))
# 5

Список Python Count Lambda + карта

Альтернативой состоит в том, чтобы использовать комбинацию карты и функции лямбда.

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

  • [Полное руководство] Функция карты : Манипулирует каждый элемент в итерателе.
  • [Полное учебное пособие] Функция лямбда Создает анонимную функцию.

Вот код:

>>> sum(map(lambda x: x%2==0, [1, 2, 3, 4, 5]))
2

Вы считаете количество даже целых чисел в списке.

  • Функция лямбда возвращает значение правды для данного элемента х Отказ
  • Функция карты преобразует каждый элемент списка в логическое значение (1 или 0).
  • Функция суммы суммирует «1».

Результатом является количество элементов, для которых условие оценивается к Правда Отказ

Список Python Count Regex/Count Matchs

Учитывая список строк. Как вы можете проверить, сколько элементов списка совпадает с определенным рисунком Regex? (Если вам нужен переподготовка к регулярным выражениям Python, посмотрите, как My Ultimate Guide по этому BLO G – это действительно Ultimate!)

  • Список lst струнных элементов
  • Шаблон P быть сопоставленным против струн в списке.

Решение : Используйте концепцию выражений генератора с помощью Ternary Operator.

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

  • Мастер Тернарный оператор.
  • Уменьшение рассмотрения главного списка.

Вот код:

>>> import re
>>> p = 'a...e'
>>> lst = ['annie', 'alice', 'apex']
>>> sum(1 if re.match(p, x) else 0 for x in lst)
2

Список Python считать подстановочный знак

Вы хотите считать все строковые вхождения данного префикса (например, префикс «SUS» для струн «Сьюзи» , «SUSY» , «SUSI» )?

Решение : Опять же, вы можете использовать концепцию выражений генератора с помощью Ternary Operator.

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

  • Мастер Тернарный оператор.
  • Уменьшение рассмотрения главного списка.

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

>>> import re
>>> lst = ['Susi', 'Ann', 'Susanne', 'Susy']
>>> pattern = 'Sus.*'
>>> frequency = sum(1 if re.match(pattern, x) else 0 for x in lst)
>>> print(frequency)
3

Выражение генератора дает кучу 1s и 0s – первое, если элемент списка начинается с префикса «Sus» И последнее, если это не так. Суммируя всеми элементами, вы получаете количество совпадений оператора подстановки.

Список Python Count не работает

list.Count (значение) Метод очень трудно сломаться. Посмотри, что я пытался получить ошибку:

>>> lst = [1, 1, 1, 2, 2, 3]
>>> lst.count(1)
3
>>> lst.count(2, 2)
Traceback (most recent call last):
  File "", line 1, in 
    lst.count(2, 2)
TypeError: count() takes exactly one argument (2 given)
>>> lst.count(4)
0
>>> lst.count("1")
0
>>> count(lst)
Traceback (most recent call last):
  File "", line 1, in 
    count(lst)
NameError: name 'count' is not defined
>>> 

Вы должны попробовать очень трудно сломать его. Просто рассмотрите эти советы:

  • list.Count (значение) Метод принимает ровно один аргумент: значение, которое вы хотите рассчитывать. Если вы определите более или менее аргументы, произойдет ошибка.
  • list.Count (значение) Метод – это просто: метод объекта списка. Вы должны вызвать его в объекте списка. Если вы попытаетесь вызвать его на другом объекте, это, вероятно, будет не удастся. Если вы попытаетесь использовать его так же, как это (без префикса списка, I.E., Count (значение) ), он также не удастся.
  • list.Count (значение) вернутся 0, если вы поместите в любой объект как аргумент, который не оценивает Правда по сравнению с элементами списка, используя == Оператор сравнения. Поэтому убедитесь, что объект, который вы хотите рассчитывать, действительно оценивает Правда Если вы сравните его против некоторых элементов списка. Вы можете предположить это, но это могло легко не сделать это.

Список ссылок Python

Сборщик мусора Python Отслеживает количество раз, когда каждый объект в памяти ссылается. Вы называете это «ссылочный счетчик». Все объекты, которые имеют ссылочный счетчик нуля, не могут быть достигнуты вашим кодом и, таким образом, могут быть безопасно удалены сборщиком мусора.

Это не связано с списками Python с одним исключением: каждый элемент списка увеличивает ссылочный счетчик на один, потому что список действительно является массивом указателей на объекты списка в памяти в реализации CPYPHON.

Счет ли списка Python

Как вы можете подсчитать количество раз, когда данный кортеж появляется в списке?

Просто используйте кортеж в качестве значения аргумента ввода для list.Count (значение) метод. Вот пример:

>>> lst = [(1, 2), (1, 1), 99, "Alice", True, (1, 1)]
>>> lst.count((1, 1))
2

Как вы можете посчитать количество кортежей в данном списке?

Используйте Тип (х) Метод проверки типа заданной переменной х Отказ Затем сравните результат с желаемым типом данных (например, кортеж ).

Вот пример:

>>> sum(type(x)==tuple for x in lst)
3

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

  • Мастер Тернарный оператор.
  • Уменьшение рассмотрения главного списка.

Список списка Python и сортировка

Дано : список lst Отказ

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

Пример : Для элементов списка [1, 1, 1, 1, 0, 0, 3, 1, 1, 3, 3, 3] вы хотите получить их частоты сортируемыми способом:

6 times --> element 1
4 times --> element 3
2 times --> element 0

Решение : Используйте Collections.counter (lst) .ment_common () Метод, который делает именно это. Вы можете найти документацию здесь Отказ

import collections

lst = [3, 2, 1, 1, 1, 2, 2, 3]
print(collections.Counter(lst).most_common())

Генерирует вывод:

[(2, 3), (1, 3), (3, 2)]

Список Python рассчитывает медленно

Хотите улучшить производительность list.Count (значение) метод? Это не легко, потому что сложность выполнения – это o (n) с n элементами списка.

Там не так много, вы можете сделать с этим. Конечно, если вам нужно считать тот же элемент несколько раз, вы можете использовать словарь кэша для хранения его результата. Но это работает только в том случае, если список не изменился.

Вы также можете сортировать список один раз, когда принимает o (n log n) для элементов n списка. После этого вы можете позвонить в реализацию методом подсчета на основе двоичного поиска с сложностью времени выполнения O (log n). Но если вам нужно сосчитать только один элемент, это не эффективен.

Интересно, считая Все Элементы в списке также есть сложность o (n) временной среды выполнения. Почему? Потому что вы перейдете на каждый элемент и добавьте его в словарь, если он уже не существует (сопоставление элемента к его счетчику счетчика, изначально 1). Если он существует, вы просто увеличиваете счетчик за другим.

В это Отличный ориентир, вы можете найти производительность различных методов подсчета. Счетчик Класс, кажется, имеет лучшие результаты.

Список Python Count VS Len

Какая разница?

  • То list.count (x) Способ подсчитывает количество вхождений элемента x в список .
  • То Лен (список) Метод возвращает общее количество элементов в списке.

Вот минимальный пример:

>>> lst = [1, 2, 2, 2, 2]
>>> lst.count(2)
4
>>> len(lst)
5

Резюме

То list.count (x) Метод подсчитывает количество раз элемента x появляется в список .

Python List Extend ()

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

Определение и использование

list.exdend (iTer) Метод добавляет все элементы в аргументе Iterable ИТЕР к существующему Список Отказ

Вот краткий пример:

>>> lst = [1, 2, 3]
>>> lst.extend([4, 5, 6])
>>> lst
[1, 2, 3, 4, 5, 6]

В первой строке примера вы создаете список lst Отказ Вы тогда добавляете целые числа 4, 5, 6 до конца списка, используя продлить () метод. Результатом является список с шестью элементами [1, 2, 3, 4, 5, 6] Отказ

Попробуй сам:

Синтаксис

Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.extence (потенциал)

Аргументы

считать Все элементы Iterable будут добавлены в конец списка – в порядке их возникновения.

видео

Код головоломки

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

# Puzzle
# Author: Finxter Lee
lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
lst1.append(lst2)

lst3 = [1, 2, 3]
lst4 = [4, 5, 6]
lst3.extend(lst4)

print(lst1 == lst3)
# What's the output of this code snippet?

Вы можете проверить решение на Приложение Finxter Отказ (Я знаю, что это сложно!)

Примеры

Давайте погрузимся в несколько примеров:

>>> lst = [1, 2, 3]
>>> lst.extend({32, 42})
>>> lst
[1, 2, 3, 32, 42]
>>> lst.extend((1, 2))
>>> lst
[1, 2, 3, 32, 42, 1, 2]
>>> lst.extend(range(10,13))
>>> lst
[1, 2, 3, 32, 42, 1, 2, 10, 11, 12]
>>> lst.extend(1)
Traceback (most recent call last):
  File "", line 1, in 
    lst.extend(1)
TypeError: 'int' object is not iterable
>>> 

Вы можете увидеть, что продлить () Способ обеспечивает все виды повторных документов: списков, множеств, кортежей и даже объекты диапазона. Но то, что он не позволяет, это целочисленный аргумент. Почему? Поскольку целочисленный аргумент не является нетефилизируемым – это не имеет смысла «итерации за все значения в целом».

Python List Extend () в начале

Что, если вы хотите использовать метод Extend () в начале: вы хотите «добавить» ряд элементов непосредственно перед первым элементом списка.

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

Вот пример:

>>> lst = [1, 2, 3]
>>> lst.insert(0, 99)
>>> lst
[99, 1, 2, 3]

Вставить (я, х) Способ вставляет элемент х На позиции Я в списке. Таким образом, вы можете вставить элемент в каждую позицию в списке – даже в первой позиции. Обратите внимание, что если вы введете элемент в первую позицию, каждый последующий элемент будет перемещен на одну позицию. Другими словами, элемент Я Перейдет в положение Я + 1 Отказ

Список Python Extend () VS +

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

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 секунд.

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

Python List Extend () производительность

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

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

Выход:

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

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

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

Я выполнил аналогичный эксперимент, как и раньше для оператора Concatenation перечисления + Отказ

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 () выше).

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

Python List Append () VS Extend ()

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

Метод list.append (x) Добавляет элемент х до конца Список Отказ

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

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

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

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

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

Какой метод будет быстрее – расширяет () vs plapend ()?

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

Наш тезис в том, что продлить () Метод должен быть быстрее для более крупных размеров списка, потому что 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 Append список в другой список

К списку приложений lst_1 в другой список lst_2 Используйте lst_2.extend (lst_1) метод. Вот пример:

>>> lst_1 = [1, 2, 3]
>>> lst_2 = [4, 5, 6]
>>> lst_2.extend(lst_1)
>>> lst_2
[4, 5, 6, 1, 2, 3]

Python List Extend () не возвращает

Возвращаемое значение продлить () Метод это Нет Отказ Возвращаемое значение продлить () Метод не является списком с добавленными элементами. Предполагая, что это общий источник ошибок.

Вот такая ошибка, когда кодер ошибочно предположил это:

>>> lst = [1, 2].extend([3, 4])
>>> lst[0]
Traceback (most recent call last):
  File "", line 1, in 
    lst[0]
TypeError: 'NoneType' object is not subscriptable

Это не имеет смысла назначать результат продлить () метод другой переменной – потому что это всегда Нет Отказ Вместо этого продлить () Метод изменяет объект списка без создания (и возврата) нового списка.

Вот правильная версия того же кода:

>>> lst = [1, 2]
>>> lst.extend([3, 4])
>>> lst[0]
1

Теперь вы измените сам объект списка, позвонив продлить () Метод на нем. Вы прочь Нет Возвращаемое значение, потому что он не нужен.

Список Python Concatenation

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

Это шесть способов объединения списков (здесь подробный учебник):

  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]
'''

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

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

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

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

Тем не менее, вам следует избегать использования метода Append () для конкатенации списка, потому что он не очень эффективен, ни краткий и читаемый.

Список Python Extend () Уникальный – Добавить, если не существует

Общий вопрос заключается в следующем:

Как вы можете добавить или добавлять элементы в список, но только если они еще не существуют в списке?

Если игнорируя любые проблемы с производительностью, ответ прост: используйте состояние, если в сочетании с операцией членства Элемент в списке и только Добавить () Элемент Если результат это Ложь (Не используйте Расширение () для этого мелкозернистого метода). В качестве альтернативы вы также можете использовать операцию отрицательной членства Элемент не в списке и добавить элемент, если результат – Правда Отказ

Пример : Скажем, вы хотите добавить все элементы от 0 до 9 в список трех элементов. Но вы не хотите дубликаты. Вот как вы можете сделать это:

lst = [1, 2, 3]
for element in range(10):
    if element not in lst:
        lst.append(element)	

Результирующий список:

[1, 2, 3, 0, 4, 5, 6, 7, 8, 9]

Вы добавляете все элементы от 0 до 9 в список, но только если они еще не присутствуют. Таким образом, полученный список не содержит дубликатов.

Но есть проблема: этот метод очень неэффективен!

В каждой итерации петли фрагмент Элемент не в LST Ищется весь список для текущего элемент Отказ Для списка с N Элементы, это результаты в N Сравнение, на итерацию. Как у вас есть N Итерации, сложность выполнения данного фрагмента кода является квадратичным в количестве элементов.

Вы можете сделать лучше?

Конечно, но вам нужно смотреть за пределы типа данных списка: Наборы Python здесь правильная абстракция. Если вам нужно обновить ваше основное понимание заданного типа данных, ознакомьтесь с моим подробным учебным пособием (с примерами Harry Potter) в блоге Finxter.

Почему Python отлично подходит для этого? Потому что они не позволяют никаких дубликатов на дизайн: Набор – это Уникальный Коллекция неупорядоченных элементов Отказ И Сложность времени выполнения Операции членства не является линейным в количестве элементов (как это дело для списков), но постоянные!

Пример : Скажем, вы хотите добавить все элементы от 0 до 9 до набора трех элементов. Но вы не хотите дубликаты. Вот как вы можете сделать это с наборами:

s = {1, 2, 3}
for element in range(10):
    s.add(element)

print(s)

Полученный набор:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Набор не позволяет дублировать записи, чтобы элементы 1, 2 и 3 не добавляются дважды на множество.

Вы даже можете сделать этот код более лаконичным:

s = {1, 2, 3}
s = s.union(range(10))

print(s)

Выход:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Метод Union создает новый набор, который состоит из всех элементов в обеих операндах.

Теперь вы можете захотеть иметь список в результате, а не набор. Решение простое: преобразуйте результирующий набор в список, используя Список (набор) Метод преобразования. Это имеет линейную сложность выполнения, и если вы называете его только один раз, он не изменяет общую сложность выполнения кодового фрагмента (он остается линейным в количестве заданных элементов).

Проблема: Что, если вы хотите сохранить информацию о заказе и до сих пор добавлять все элементы, которые еще не в списке?

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

lst = [1, 2, 3]
s = set(lst)

for element in range(10):
    if element not in s:
        s.add(element)
        lst.append(element)
        
print(lst)

Результирующий список:

[1, 2, 3, 0, 4, 5, 6, 7, 8, 9]

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

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

Список Python Extend () Вернуть новый список

Если вы используете lst.extend (ИТЕР) Операция, вы добавляете элементы в ИТЕР в существующий список lst Отказ Но что, если вы хотите создать новый список, где были добавлены все элементы?

Ответ просто использовать Список конкатенации Операция lst + список (iTer) который создает новый список каждый раз, когда он используется. Оригинальный список lst не будет затронута операцией конкатенации списка.

Вот пример, который показывает, что продлить () Способ изменяет только существующий список:

>>> lst_1 = [1, 2, 3]
>>> lst_2 = lst_1.extend([42, 99])
>>> lst_1
[1, 2, 3, 42, 99]

И вот пример, который показывает, как создать новый список, когда вы добавляете элементы 42 и 99 в список:

>>> lst_3 = [1, 2, 3]
>>> lst_4 = lst_3 + [42, 99]
>>> lst_3
[1, 2, 3]

Используя операцию конкатенации списка, вы можете создать новый список, а не добавлять элемент в существующий список.

Список Python расширяет () Сложность времени, память и эффективность

Сложность времени: продлить () Метод имеет линейный Сложность времени O (n) В количестве элементов N быть добавленным в список. Добавление одного элемента в список требуется только постоянное количество операций – независимо от размера списка.

Космическая сложность: продлить () Метод имеет линейную космическую сложность O (n) В количестве элементов N быть добавленным в список. Сама операция нуждается только в постоянном количестве байтов для вовлеченных временных переменных. Настройка памяти не зависит от размера списка.

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

Python List Extend () при индексе

Если вы хотите вставить весь список в определенную позицию и создать новый список, если это рекомендую использовать нарезку Python. Ознакомьтесь с этим углубленным руководством блога, который покажет вам все, что вам нужно знать о нарезке.

Вот код, который показывает, как создать новый список после вставки списка в определенном положении:

>>> lst = [33, 44, 55]
>>> lst[:2] + [99, 42] + lst[2:]
[33, 44, 99, 42, 55]

Опять же, вы используете Список конкатенации Чтобы создать новый список с элементом 99, вставленных в положение 2. Обратите внимание, что операции нарезки lst [: 2] и lst [2:] Создайте свою собственную неглубокую копию списка.

Резюме

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

Индекс списка Python ()

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

Определение и использование: list.index (значение) Метод возвращает индекс стоимость аргумент в список Отказ Вы можете использовать необязательный Начало и останавливаться Аргументы для ограничения диапазона индекса, где искать значение в списке. Если значение не в списке, метод бросает ValueError. .

Вот краткий пример:

>>> lst = ["Alice", 42, "Bob", 99]
>>> lst.index("Alice")
0
>>> lst.index(99)
3
>>> lst.index(99, 1, 3)      
Traceback (most recent call last):
  File "", line 1, in 
    lst.index(99, 1, 3)
ValueError: 99 is not in list

В первой строке примера вы создаете список lst Отказ Затем вы посмотрите на индекс элементов "Алиса" и 99 Отказ Если вы используете Start = 1 и Стоп = 3 , значение 99 больше не найден, а Python бросает ValueError Отказ

Код головоломки – попробуйте сами:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

Вы также можете решить эту головоломку и отслеживать свои навыки Python на нашем интерактивном приложении Finxter.

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python ( Python Versions 2.x и 3.x ). Вот синтаксис:

list.index (значение ,,)

Аргументы:

стоимость Возвращает индекс значения в списке. В списке появляется значение, если оператор == возвращает true. Если значение не существует в списке, возвращаемое значение равно -1.
Начало (Необязательно.) Индекс того, где вы хотите начать поиск в списке. Все элементы списка перед этой позицией игнорируются. Это позиционный аргумент, а не аргумент ключевых слов.
останавливаться (Необязательно.) Индекс того, где вы хотите перестать поиск в списке. Все элементы списка после этой позиции игнорируются. Это позиционный аргумент, а не аргумент ключевых слов.

Возвращаемое значение: Метод list.index (значение) Возвращает целочисленное значение, представляющее индекс, где аргумент ценность появляется в списке. Если значение не отображается в списке, метод бросает ValueError Отказ

Связанная статья: Python Regex SuperPower – Ultimate Guide

Реализация индекса списка Python

Так что вы действительно хотите знать Cpython Реализация Индекс () метод?

На высоком уровне алгоритм, чтобы найти индекс заданного значения в списке состоит из следующих шагов:

  • Убедитесь, что начальные и стоп-индексы не менее нуля.
  • Итайте для всех элементов в списке и проверьте, будут ли они равны.
  • Если они равны, вернитесь немедленно из способа.
  • Если ни один элемент не найден, бросьте ValueError Отказ

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

/*[clinic input]
list.index
    value: object
    start: slice_index(accept={int}) = 0
    stop: slice_index(accept={int}, c_default="PY_SSIZE_T_MAX") = sys.maxsize
    /
Return first index of value.
Raises ValueError if the value is not present.
[clinic start generated code]*/

static PyObject *
list_index_impl(PyListObject *self, PyObject *value, Py_ssize_t start,
                Py_ssize_t stop)
/*[clinic end generated code: output=ec51b88787e4e481 input=40ec5826303a0eb1]*/
{
    Py_ssize_t i;

    if (start < 0) {
        start += Py_SIZE(self);
        if (start < 0)
            start = 0;
    }
    if (stop < 0) {
        stop += Py_SIZE(self);
        if (stop < 0)
            stop = 0;
    }
    for (i = start; i < stop && i < Py_SIZE(self); i++) {
        PyObject *obj = self->ob_item[i];
        Py_INCREF(obj);
        int cmp = PyObject_RichCompareBool(obj, value, Py_EQ);
        Py_DECREF(obj);
        if (cmp > 0)
            return PyLong_FromSsize_t(i);
        else if (cmp < 0)
            return NULL;
    }
    PyErr_Format(PyExc_ValueError, "%R is not in list", value);
    return NULL;
}

Но какова вычислительная сложность этого Индекс () Метод в Python?

Сложность указателя списка Python

Для простоты вот питон эквивалентен реализации с некоторыми основными упрощениями, которые не изменяют общую сложность:

def index(value, lst):
    for i, el in enumerate(lst):
        if el==value:
            return i
    raise Exception('ValueError')

print(index(42, [1, 2, 42, 99]))
# 2

print(index("Alice", [1, 2, 3]))
'''
Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 10, in 
    print(index("Alice", [1, 2, 3]))
  File "C:\Users\xcent\Desktop\code.py", line 5, in index
    raise Exception('ValueError')
Exception: ValueError
'''

Я знаю, что это не идеальная репликация вышеуказанного кода C ++. Но этого достаточно, чтобы увидеть вычислительное (выполнение) сложность list.index (значение) метод.

Индекс () Метод имеет линейную сложность выполнения в количестве элементов списка. Для N Элементы, сложность времени выполнения – O (n) Потому что в худшем случае вам нужно повторить каждый элемент в списке, чтобы найти, что элемент не появляется в нем.

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

Вы можете увидеть участок времени сложности Индекс () Метод растущего размера списка здесь:

На рисунке показано, как прошедшее время нахождения элемента последнего списка в списке. Этот эксперимент повторяется для растущего количества элементов. Время выполнения растет линейным до количества элементов.

Если вы заинтересованы в коде, я использовал для генерации этого участка MATPLOTLIB, это он:

import matplotlib.pyplot as plt
import time

y = []
for i in [100000 * j for j in range(10,100)]:
    lst = list(range(i))
    t0 = time.time()
    x = lst.count(-99)
    t1 = time.time()
    y.append(t1-t0)


plt.plot(y)
plt.xlabel("List elements (10**5)")
plt.ylabel("Time (sec)")
plt.show()

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

  • Методы списка Python – простой обзор
  • Как начать изучать Python?

Индекс списка Python без исключения

По умолчанию, list.index () Метод будет бросать ValueError Если значение не равно элементу Список Отказ Когда я впервые столкнулся с методом list.index (), я предположил, что возвращаемое значение будет просто -1, поэтому я был удивлен, что метод бросил ошибку. Однако, подумав о проблеме, я пришел к выводу, что он имеет большой смысл не возвращать значение -1, если индекс не найден. Причина в том, что по Конвенции индекс -1 относится к последнему элементу в списке в Python:

>>> lst = [1, 2, 3]
>>> lst[-1]
3

Но что, если вы не хотите получить исключение, если значение не может быть найдено?

В этом случае вы можете использовать функции лямбда и список списков, чтобы написать свой собственный метод в одной строке кода:

>>> ind = lambda l, v: [i for i in range(len(l)) if l[i] == v]
>>> ind('Alice', ['Bob', 'Alice', 'Frank'])
[]
>>> ind(['Bob', 'Alice', 'Frank'], 'Alice')
[1]

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

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

Индекс списка Python попробуйте поймать

Python list.index (значение) Метод бросает ValueError Если значение не в списке. Если вы ничего не делаете об этом, это может нарушить всю вашу программу. Так что вы можете сделать с этим?

Питонический способ – это «поймать» исключение в блоке попробовать/ловить. Затем вы можете обрабатывать его в блоке Catch, который выполняется только в том случае, если значение не в списке. (Вам нужен план резервного копирования в любом случае.)

Вот как вы можете поймать ValueError В минимальном фрагменте кода:

lst = [1, 2, 3]

try:
    index = lst.index('Alice')
except ValueError:
   index = None

print(index)
# None

Вывод ожидается:

None 

Вы даже не видите, что произошло исключение при выполнении кода.

Однако, если это, кажется, давно обнародован для вас (и вы любите Python One-Listers так же, как и я, вы должны сделать следующее:

Во-первых, проверьте мою новую книгу Python One-listers Это научит вас понять каждую одну линейку кода, который вы когда-либо сталкиваетесь на практике.

Во-вторых, используйте одноклассницу для достижения того же:

lst = [1, 2, 3]

indices = [i for i in range(len(lst)) if lst[i]=='Alice']
index = indices[0] if indices else None
print(index)

Это мой предпочтительный вариант.

Индекс списка Python вне диапазона

Это сообщение об ошибке появляется, если вы пытаетесь получить доступ к элементам списка с индексом, который больше, чем максимальный допустимый индекс или меньше, чем Отрицательная индексация -Лен (список) Отказ

Вот минимальный пример обоих случаев:

>>> lst = [1, 2, 3]
>>> lst[3]
Traceback (most recent call last):
  File "", line 1, in 
    lst[3]
IndexError: list index out of range
>>> lst[-5]
Traceback (most recent call last):
  File "", line 1, in 
    lst[-5]
IndexError: list index out of range

Чтобы избежать IndexError, просто используйте индексы в пределах допустимого диапазона (инклюзивных чисел) между -Лен (список) и + Лен (список) -1 Отказ

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

l=[3, 3, 3, 4, 4, 4]
for i in range(0,len(l)):
    l.pop(i)

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 3, in 
    l.pop(i)
IndexError: pop index out of range

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

Индекс списка Python несколько

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

lst = [1, 2, 3, 3, 3, 3, 3, 3, 0, 0, 0]
value = 3
min_index = 0
indices = []

while min_index < len(lst):
    try:
        indices.append(lst.index(value, min_index))
        min_index = indices[-1] + 1
    except ValueError:
        min_index = len(lst)

print(indices)
# [2, 3, 4, 5, 6, 7]

Но я бы не советую это, как это сложно и трудно читать. Простой одноклассник это все, что тебе нужно:

indices = [i for i in range(len(lst)) if lst[i] == value]
print(indices)
# [2, 3, 4, 5, 6, 7]

Красивая лучше сложное!

Индекс списка Python Max/Min

Дано это список:

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101]

Максимальный элемент в списке составляет 101.

Проблема : Найти все индексные позиции (ы) максимума в списке.

Решение: используйте следующее краткое решение, чтобы получить список максимальных позиций.

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101]
maxs = [i for i in range(len(a)) if a[i] == max(a)]
print(maxs)
# [5, 7, 10]

В фрагменте кода вы используете Понимание списка Чтобы получить все показатели максимального элемента Макс (а) Отказ

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

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101]
max_a = max(a)
maxs = [i for i in range(len(a)) if a[i] == max_a]
print(maxs)
# [5, 7, 10]

Вы можете легко сделать то же самое для индексов минимальных элементов в списке, используя мин (а), а не MAX (A):

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101]
min_a = min(a)
mins = [i for i in range(len(a)) if a[i] == min_a]
print(mins)
# [6]

Индекс списка Python с конца (обратный)

Вы можете рассчитать индекс с конца, используя перевернутый список (я использовал нарезку lst [:: - 1] с отрицательным размером шага, чтобы изменить список).

Скажите, вы список элементов. Вы ищете значение 101. По умолчанию метод list.index (value) просматривает слева и возвращает левый элемент, который равна значению. Но что, если вы хотите сделать это справа?

Вот как: вы рассчитываете индекс (по отношению к исходному списку), как это: index_right (a) - A [:: - 1] .index (101) - 1 Отказ

a = [23, 55, 89, 101, 1, 101, 33, 83]

index_left = a.index(101)
index_right =  len(a) - a[::-1].index(101) - 1

print(index_left)
# 3

print(index_right)
# 5

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

Индекс списка Python Regex/Wildcard

Как вы можете найти индекс элементов в списке, который соответствует определенному Regex?

Связанная статья:

  • Python Regex SuperPower: полный учебник

Ответ : Вы делаете это с коротким Понимание списка Заявление (нет встроенного метода, и это достаточно просто).

import re

lst = ['Alice', 'Bob', 'Ann', 'Albrecht']
pattern = 'A.*'

matching_indices = [i for i in range(len(lst)) if re.match(pattern, lst[i])]
print(matching_indices)
# [0, 2, 3]

Re.match (шаблон, lst [i]) Метод возвращает соответствующий объект, если шаблон соответствует элементу в положении I в списке. В этом случае вы добавляете его в список результатов.

Индекс списка Python Cuple

Как найти индекс кортежа в списке кортежей?

Используйте list.index (значение) Способ, который возвращает индекс первого возникновения значения в списке. Это также работает для кортежей:

>>> [(1, 1), (2, 2), (3, 3)].index((3,3))
2

Индекс списка Python True False

Как найти все показатели Правда Значения в списке кортежей?

Использование списка понимание со встроенным перечислять () Функция для итерации по всему (индекс, стоимость) пары. Вот минимальный пример:

lst = [True, True, True, False, False, True]
print([i for i, x in enumerate(lst) if x])
# [0, 1, 2, 5]

Вы можете сделать то же самое, но проверьте на не х Чтобы найти все показатели Ложь Значения в списке:

lst = [True, True, True, False, False, True]
print([i for i, x in enumerate(lst) if not x])
# [3, 4]

Индекс списка Python ноль/ненулевой

Как найти индексы всех нулевых элементов в списке?

Использование списка понимание со встроенным перечислять () Функция для итерации по всему (индекс, стоимость) пары. Вот минимальный пример:

lst = [0, 0, 0, 1, 1, 1, 0, 1]
print([i for i, x in enumerate(lst) if not x])
# [0, 1, 2, 6]

Вы можете найти все ненулевые элементы, пропустив отрицание в состоянии понимания списка:

lst = [0, 0, 0, 1, 1, 1, 0, 1]
print([i for i, x in enumerate(lst) if x])
# [3, 4, 5, 7]

Python List Index Pop

list.pop (индекс) Способ с дополнительным индексом аргумента удаляет и возвращает элемент в индексе позиции.

Связанная статья:

  • Список Python POP ()

Пример выглядит следующим образом:

>>> lst = [1, 2, 3]
>>> lst.pop()
3
>>> lst
[1, 2]

В первой строке примера вы создаете список lst Отказ Затем вы удалите и возвращаете окончательный элемент 3 из списка. Результатом является список только с двумя элементами [1, 2] Отказ

Удалить индекс списка Python

Этот трюк также относительно неизвестен среди начинающих Python:

  • Использовать del lst [индекс] Чтобы удалить элемент при индексе.
  • Использовать del lst [start: Stop] Чтобы удалить все элементы в ломтик Отказ
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del lst[5]
>>> lst
[0, 1, 2, 3, 4, 6, 7, 8, 9]
>>> del lst[:4]
>>> lst
[4, 6, 7, 8, 9]

Диапазон индекса списка Python

Если вы ищете диапазон индекса, вы, вероятно, значения нарезка Какая передовая техника вытекает ряд значений из списка или строки Python. Смотрите полный учебник нарезки на блог Finxter здесь.

Обозначение это Список [Старт: Стоп: Шаг] Отказ Аргумент шага является необязательным, и вам не нужно, чтобы вырезать диапазон значений.

Вот некоторые примеры:

>>> lst = ['a', 'b', 'c', 'd', 'e']
>>> lst[:]
['a', 'b', 'c', 'd', 'e']
>>> lst[2:4]
['c', 'd']
>>> lst[3:]
['d', 'e']
>>> lst[:-3]
['a', 'b']
>>> lst[:-1]
['a', 'b', 'c', 'd']
>>> lst[::2]
['a', 'c', 'e']

Индекс списка Python в 2D списках

Скажем, вы хотите найти индекс ряд и столбцов значения 5 в массиве

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

Вы можете просто рассчитать координаты X и Y, как это:

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

row = [x for x in a if 5 in x][0]
x = a.index(row)
y = row.index(5)
print(x, y)
# 2 0

Резюме

list.index (значение) Способ находит индекс первого возникновения элемента ценность В Список Отказ Вы узнали IS и ауты этого важного Метод списка Python Отказ

Вставка списка Python ()

Как вы можете вставить элемент в данный индекс в данном списке? Python Вставить () Метод твой друг.

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

Определение и использование :

То list.insert (i, элемент) Способ добавляет элемент элемент к существующему список в позиции i Отказ Все элементы J> I. будет перемещаться одним положением индекса вправо.

Вот краткий пример:

>>> lst = [1, 2, 3, 4]
>>> lst.insert(3, 99)
>>> lst
[1, 2, 3, 99, 4]

В первой строке примера вы создаете список lst Отказ Затем вы вставляете целочисленный элемент 99 в положение 3 списка. Результатом является список с пятью элементами [1, 2, 3, 99, 4] Отказ

Попробуй сам:

Синтаксис :

Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.insert (индекс, элемент)

Аргументы:

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

Видео:

Код головоломки:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

# Puzzle
# Puzzle created by Finxter Lee
lst = [1, 3, 4, 5, 6, 7, 8]
lst.insert(1, 2)
print(lst)
# What's the output of this code snippet?

Вы можете проверить решение на Приложение Finxter Отказ

Примеры:

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

>>> lst = [1, 2, 3]
>>> lst.insert(0, 99)
>>> lst
[99, 1, 2, 3]
>>> lst.insert(-1, 42)
>>> lst
[99, 1, 2, 42, 3]
>>> lst.insert(100, 0)
>>> lst
[99, 1, 2, 42, 3, 0]

Интересный случай – второй, где вы используете отрицательный индекс в методе INSERT ():

Список Python Вставка () Отрицательный индекс

Вы можете использовать отрицательный индекс в lst.insert (индекс, элемент) метод. С отрицательным индексом вы рассчитываете назад, начиная с права. Другими словами, индекс -1 Подпитывается для правого элемента в списке. Вставить () Способ вставляет элемент прямо перед позицией индекса. Таким образом, вы получаете следующее поведение, где элемент вставлен на вторую последнюю позицию:

>>> lst = ["Ann", "Bob", "Alice"]
>>> lst.insert(-1, "Liz")
>>> lst
['Ann', 'Bob', 'Liz', 'Alice']

Что произойдет, если вы рассчитываете дальше, то есть -2, -3 или даже -99? Давай проверим:

>>> lst.insert(-2, "Sam")
>>> lst
['Ann', 'Bob', 'Sam', 'Liz', 'Alice']

… и …

>>> lst.insert(-3, "Bob")
>>> lst
['Ann', 'Bob', 'Bob', 'Sam', 'Liz', 'Alice']

… и …

>>> lst.insert(-99, "Hans")
>>> lst
['Hans', 'Ann', 'Bob', 'Bob', 'Sam', 'Liz', 'Alice']

Таким образом, вы можете видеть, что каждый целочисленный индекс разрешен! Если вы завышете (например, -99), он просто будет вставлять в начале списка.

Список Python вставить () в начале

Вставить () Метод позволяет добавить элемент в начале списка. Просто используйте индекс 0 в вызове lst.insert (0, элемент) Чтобы добавить элемент в начало lst Отказ

Вот пример:

>>> lst = [1, 2, 3]
>>> lst.insert(0, 99)
>>> lst
[99, 1, 2, 3]

Вставить (я, х) Способ вставляет элемент х На позиции Я в списке. Таким образом, вы можете вставить элемент в каждую позицию в списке – даже в первой позиции. Обратите внимание, что если вы введете элемент в первую позицию, каждый последующий элемент будет перемещен на одну позицию. Другими словами, элемент Я Перейдет в положение Я + 1 Отказ

Вставка списка Python () в конце

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

>>> lst = [1, 2, 3, 4, 5, 6]
>>> lst.insert(6, 99)
>>> lst
[1, 2, 3, 4, 5, 6, 99]
>>> lst.insert(100000, 42)
>>> lst
[1, 2, 3, 4, 5, 6, 99, 42]

Независимо от вашего конкретного выбора аргумента индекса, до тех пор, пока он больше или равен текущему размеру списка, ваш элемент будет вставлен в конце списка.

Однако это не имеет большого смысла, учитывая, что вы можете использовать Добавить (элемент) Способ, который добавляет элемент в конце списка – и является высокоэффективным (и читаемым). Узнайте больше о методе Append () в моей детальной статье блога.

Вот пример, добавляя те же элементы 99 и 42 до конца списка:

>>> lst = [1, 2, 3, 4, 5, 6]
>>> lst.append(99)
>>> lst.append(42)
>>> lst
[1, 2, 3, 4, 5, 6, 99, 42]

В Python обычно есть много способов достичь то же самое. Используя Добавить () Способ добавления элемента к концу списка лучше!

Python INSERT () в отсортированный список

Как вставить элемент в сортированный список (по возрастанию) и сохранить список отсортирован?

Наивный подход – пройти все элементы, от первого до последнего, пока элемент, который будет вставлен, все еще меньше, чем текущий элемент в списке. Как только он больше, вы верните одну позицию и вставьте его там.

Тем не менее, вычислительная сложность алгоритма наивных сортировков является плохой, потому что вам необходимо до n операций, чтобы вставить элемент в список n элементов.

Если вы заинтересованы правильным способом сделать это, вы можете использовать двоичный поиск и list.insert (i, x) Способ вставить элемент х На позиции Я в списке. Вот код для двоичного алгоритма поиска в Python:

def binary_search(lst, value):
    lo, hi = 0, len(lst)-1
    while lo <= hi:
        mid = (lo + hi) // 2
        if lst[mid] < value:
            lo = mid + 1
        elif value < lst[mid]:
            hi = mid - 1
        else:
            return mid
    return -1

    
l = [3, 6, 14, 16, 33, 55, 56, 89]
x = 56
print(binary_search(l,x))
# 6 (the index of the found element)

Не волнуйтесь, если код выглядит немного сложно!

Вы можете найти более подробное обсуждение алгоритма двоичного поиска в моем подробном руководстве по блоге Finxter.

Список Python вставка () несколько элементов

Как вы можете вставить несколько элементов в список? Просто позвоните Вставить () Метод несколько раз – один раз для каждого элемента, который будет вставлен! Но будьте осторожны: вы должны поменять заказ элементов, которые будут вставлены в первую очередь, если вы сохраните постоянную позицию вставки. Вот что я имею в виду:

>>> lst = [1, 2, 3, 4]
>>> insert = [42, 99]
>>> insert.reverse()
>>> for el in insert:
	lst.insert(2, el)

	
>>> lst
[1, 2, 42, 99, 3, 4]

Вы хотите вставить элементы 42 и 99 в положение 2 списка lst , в этой последовательности. Если вы просто проиграете в оба элементах, вы впервые вставляете элемент 42 до индекса 2. Теперь элемент 42 получает положение 2 в списке. Далее вы вставьте элемент 99 перед позицией 2. Теперь элемент 99 получает положение 2 в списке. Таким образом, в основном вы изменили исходный порядок элементов, которые будут вставлены. Поэтому вы должны позвонить в Обратный () Способ сначала перед вставкой элементов в список.

Там действительно нет лучшей альтернативы. Конечно, вы можете использовать конконтрацию списка, но это не так эффективно, потому что вы создадите новый список, а не изменять существующий список:

>>> lst = [1, 2, 3, 4]
>>> insert = [42, 99]
>>> lst = lst[:2] + insert + lst[2:]
>>> lst
[1, 2, 42, 99, 3, 4]

Это может быть более читаемо, но это не так эффективно, потому что Concatenation списка создает новый список каждый раз, когда он используется. Если вам нужно обновить ваши основные навыки нажатия на нарезку Python (например, в операции LST [: 2]), ознакомьтесь с этим подробным руководством блога.

Список Python вставка () сложность

Сложность времени: Вставить () Метод имеет постоянный Сложность времени O (1) Неважно, сколько элементов в списке. Причина в том, что Списки Python реализуются списками массива переменной длины Так что доступ к определенной позиции быстро. Также вставляя элемент в список массива быстро, потому что вам нужно только изменять указатели предыдущих и следующих элементов в списке.

Вставка списка Python () VS PROPEND ()

Разница между Добавить () и Вставить () Метод следующий:

  • Приложение (X) Метод добавляет новый элемент х до конца списка и
  • Вставить (я, х) Метод добавляет новый элемент х На позиции Я в списке. Он сдвигается все последующие элементы одно положение справа.

Вот пример, показывающий оба Добавить () и Вставить () Методы в действии:

>>> l = [1, 2, 3]
>>> l.append(99)
>>> l
[1, 2, 3, 99]
>>> l.insert(2, 42)
>>> l
[1, 2, 42, 3, 99]

Оба метода помогают вам добавлять новые элементы в список. Но вы можете спросить:

Что быстрее, добавьте () или вставить ()?

Все вещи равны, Добавить () Метод значительно быстрее, чем Вставить () метод.

Вот небольшой сценарий, который показывает, что Добавить () Метод имеет огромное преимущество производительности над Вставить () Метод при создании списка с 100 000 элементов.

import time

l1 = []
l2 = []

t1 = time.time()

for i in range(100000):
    l1.append(i)

t2 = time.time()

for i in range(100000):
    l2.insert(0,i)

t3 = time.time()


print("append(): " + str(t2 - t1) + " seconds")
print("insert(): " + str(t3 - t2) + " seconds")

# OUTPUT:
# append(): 0.015607357025146484 seconds
# insert(): 1.5420396327972412 seconds

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

Альтернативы: Python List Append () VS Extend ()

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

Какая разница?

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

Метод list.append (x) Добавляет элемент х до конца Список Отказ

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

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

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

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

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

Какой метод будет быстрее – расширяет () vs plapend ()?

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

Наш тезис в том, что продлить () Метод должен быть быстрее для более крупных размеров списка, потому что 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 INSERT () возвращает нет

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

Вот такая ошибка, когда кодер ошибочно предположил это:

>>> lst = [1, 2].insert(1, 99)
>>> lst[0]
Traceback (most recent call last):
  File "", line 1, in 
    lst[0]
TypeError: 'NoneType' object is not subscriptable

Это не имеет смысла назначать результат Вставить () метод другой переменной – потому что это всегда Нет Отказ Вместо этого Вставить () Метод изменяет объект списка без создания (и возврата) нового списка.

Вот правильная версия того же кода:

>>> lst = [1, 2]
>>> lst.insert(1, 99)
>>> lst[1]
99

Теперь вы измените сам объект списка, позвонив Вставить () Метод на нем. Вы прочь Нет Возвращаемое значение, потому что он не нужен.

Список Python INSERT () Вернуть новый список

Если вы используете lst.insert (индекс, элемент) Операция, вы добавляете элемент в существующий список lst Отказ Но что, если вы хотите создать новый список, где были добавлены все элементы?

Ответ просто использовать Список конкатенации Операция lst [: index] + [Элемент] + lst [index:] который создает новый список каждый раз, когда он используется. Оригинальный список lst не будет затронута операцией конкатенации списка.

Вот пример, который показывает, что Вставить () Способ изменяет только существующий список:

>>> lst_1 = [1, 2, 3]
>>> lst_2 = lst_1.insert(1, 42)
>>> lst_1
[1, 42, 2, 3]
>>> lst_2
None

И вот пример, который показывает, как создать новый список, вставляющий элемент 42 при индексе 2:

>>> lst_1 = [1, 2, 3]
>>> lst_2 = lst_1[:1] + [42] + lst_1[1:]
>>> lst_1
[1, 2, 3]
>>> lst_2
[1, 42, 2, 3]

Используя операцию ConcateNation List, вы можете создать новый список, а не вставлять элемент в существующий список.

Резюме

list.insert (индекс, элемент) Метод вставляет элемент до конца Список до данного индекс позиция.

Список Python POP ()

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

Определение и использование :

То list.pop () Способ удаляет и возвращает последний элемент из существующего список Отказ То list.pop (индекс) Способ с дополнительным аргументом показатель Удаляет и возвращает элемент в положение показатель .

Вот краткий пример:

>>> lst = [1, 2, 3]
>>> lst.pop()
3
>>> lst
[1, 2]

В первой строке примера вы создаете список lst Отказ Затем вы удалите и возвращаете окончательный элемент 3 из списка. Результатом является список только с двумя элементами [1, 2] Отказ

Код головоломки – попробуйте сами:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

Вы также можете решить эту головоломку и отслеживать свои навыки Python на нашем интерактивном приложении Finxter.

Синтаксис :

Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.pop (index = -1)

Аргументы:

показатель Дополнительный аргумент. Вы можете определить индекс элемента, который будет удален и возвращен. Аргумент по умолчанию приводит к удалению элемента последнего списка с индексом -1.

Возвращаемое значение:

Метод list.pop () имеет возврат ценности Объект Отказ Он удаляет конкретный элемент из списка (по умолчанию: последний элемент) и возвращает его непосредственно к абонеру.

Видео:

Python List Pop () по индексу

Вы можете использовать list.pop (индекс) Способ с дополнительным аргументом индекса для удаления и возврата элемента в положении индекс из списка.

Вот пример:

>>> customers = ['Alice', 'Bob', 'Ann', 'Frank']
>>> customers.pop(2)
'Ann'
>>> customers
['Alice', 'Bob', 'Frank']
>>> customers.pop(0)
'Alice'
>>> customers
['Bob', 'Frank']

После создания списка с четырьмя элементами вы сначала удалите и верните второй элемент «Энн» Отказ Затем вы удаляете и вернем первый элемент «Алиса» Отказ Полученный список имеет только два элемента.

Список Python POP () First/Front/Left/Head

list.pop (индекс) Способ с дополнительным аргументом индекса для удаления и возврата элемента в положении индекс из списка. Так что, если вы хотите удалить первый элемент из списка, просто установите index = 0 Призывая list.pop (0) Отказ Это появится первый элемент из списка.

Вот пример:

>>> primes = [1, 2, 3, 5, 7, 11]
>>> primes.pop(0)
1
>>> primes
[2, 3, 5, 7, 11]

POP (0) Способ удаляет первый элемент 1 из списка простых чисел, приведенных в примере.

Список Python POP () по значению

В предыдущих двух примерах вы видели, как поп-элементы по индексу. Но вы также можете пойти по стоимости?

Да, вы можете использовать list.index (значение) Способ, который дает вам индекс значения элемента в списке. Теперь вы можете использовать list.pop (индекс) Способ этого индекса Чтобы удалить значение из списка и получить результат в качестве возвращаемого значения.

Вот пример, где вы хотите поп-элемент 7 из списка и хранить результат в переменной uvery_prime Отказ

>>> primes = [1, 2, 3, 5, 7, 11]
>>> some_prime = primes.pop(primes.index(7))
>>> some_prime
7

Если вы не заинтересованы в возвращенной стоимости, но вы хотите только удалить первое вхождение значения х В Список Используйте list.remove (x) метод.

Связанная статья:

  • Список Python Удалить ()

Список Python POP () Несколько элементов

Если вы можете поп- один Элемент из списка Python, естественный вопрос, если вы также можете поп- несколько элементы одновременно?

Ответ нет. Вы не можете напрямую поп-кратную элемент из списка. Но вы можете сделать это косвенно с помощью простого заявления о понимании списка.

Список Python POP () Первые N элементов

Скажем, вы хотите поп-первые N элементов из списка. Как ты это делаешь?

Вы просто создаете список значений, используя понимание списка [List.pop (0) Для I в пределах (n)] Чтобы удалить и вернуть первый N Элементы списка.

Вот еще один пример:

>>> lst = ['a', 'b', 'c', 'd', 'e', 'f']
>>> popped = [lst.pop(0) for i in range(5)]
>>> popped
['a', 'b', 'c', 'd', 'e']
>>> lst
['f']

Скопчатый список содержит первые пять элементов. Оригинальный список имеет только один элемент.

Список Python POP () Последние n элементов

Скажем, вы хотите попять последние N элементов из списка. Как ты это делаешь?

Вы просто создаете список значений, используя понимание списка [List.pop () Для I в пределах (n)] Чтобы удалить и вернуть последний N Элементы списка.

Вот еще один пример:

>>> lst = ['a', 'b', 'c', 'd', 'e', 'f']
>>> [lst.pop() for i in range(5)]
['f', 'e', 'd', 'c', 'b']
>>> lst
['a']

Скопчатый список содержит последние пять элементов. Оригинальный список имеет только один элемент.

Список Python POP () Сложность времени

Сложность времени поп () Метод постоянен o (1). Независимо от того, сколько элементов находится в списке, выскакивание элемента из списка занимает то же время (плюс минус постоянные факторы).

Причина в том, что списки реализуются с массивами в Cpython Отказ Извлечение элемента из массива имеет постоянную сложность. Удаление элемента из массива также имеет постоянную сложность. Таким образом, извлекивая и удаление элемента, как это сделано POP () Метод имеет постоянную сложность времени выполнения тоже.

Я написал короткий скрипт для оценки сложности выполнения POP () Метод в Python:

import matplotlib.pyplot as plt
import time

y = []
for i in [100000 * j for j in range(5,15)]:
    lst = list(range(i))
    t0 = time.time()
    x = lst.pop(0)
    t1 = time.time()
    y.append(t1-t0)


plt.plot(y)
plt.xlabel("List elements (10**5)")
plt.ylabel("Time (sec)")
plt.show()

Полученный график показывает, что сложность выполнения является линейной, даже если количество элементов значительно увеличивается:

(Хорошо, есть несколько ударов, но кто действительно заботится?)

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

Python List Pop () vs Удалить ()

В чем разница между помощью List.pop () и списков.

  • list.remove (элемент) Способ удаляет первое возникновение элемент из существующего Список Отказ Это, однако, не удалит все вхождения элемента в списке!
  • list.pop () Способ удаляет и возвращает последний элемент из существующего Список Отказ list.pop (индекс) Способ с дополнительным аргументом индекс Удаляет и возвращает элемент в положение индекс Отказ

Таким образом, метод удаления удаляет по значению и метод POP удаляет по индексу. Кроме того, метод удаления ничего не возвращает (он работает в самом списке), и метод POP возвращает удаленный объект.

Список Python POP и Push (Stack)

Python не имеет встроенного Стекстическая структура данных Потому что это не нужно. Вы можете просто создать пустой список и называть его стеком. Затем вы используете метод Stack.Append (X) для нажимания элемента x в стек. И вы подаете следующее: метод Stack.pop (), чтобы протолкнуть верхний элемент из стека.

Вот пример, который показывает, как нажимать три значения в стек, а затем удалить их в традиционной первой в порядке последнего (FILO) стеками.

>>> stack = []
>>> stack.append(5)
>>> stack.append(42)
>>> stack.append("Ann")
>>> stack.pop()
'Ann'
>>> stack.pop()
42
>>> stack.pop()
5
>>> stack
[]

Список Python POP () без удаления

Хочу POP () Элемент из данного списка, не удаляя его? Не делай этого! Вместо этого используйте простую индексацию. Чтобы получить элемент с индексом Я от Список просто используйте схему индексации Список [I] Отказ Это будет держать оригинальный элемент в списке, не удаляя его.

Python List Pop () Если не пусто

Как вы можете попить () элемент только в том случае, если список не пуст в одной строке кода? Используйте Тернарный оператор в Python lst.pop () Если LST еще нет следующее:

>>> lst = [1, 2, 3]
>>> for i in range(5):
	print(lst.pop() if lst else None)

	
3
2
1
None
None

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

Если вы не используете The Terary Operator в этом примере, Python бросит IndexError Как вы пытаетесь выскочить из пустого списка:

>>> lst = [1, 2, 3]
>>> for i in range(5):
	print(lst.pop())

	
3
2
1
Traceback (most recent call last):
  File "", line 2, in 
    print(lst.pop())
IndexError: pop from empty list

Список Python POP () Ломтик

Можете ли вы появиться целым ломтиком одновременно? Ну, вы можете удалить целый кусочек, используя ключевое слово del: удалить ломтик lst [Start: Stop] Из списка вы можете позвонить del lst [start: Stop] Отказ Тем не менее, вы не получите ломтик в качестве возвращаемого значения, поэтому вы можете сначала хранить ломтик в отдельной переменной, прежде чем удалить его из списка.

Список Python POP () во время итерации

Всегда опасно изменить список, над которым вы имеете в настоящее время.

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

>>> lst = list(range(10))
>>> for i in range(len(lst)):
	lst.pop(i)

	
0
2
4
6
8
Traceback (most recent call last):
  File "", line 2, in 
    lst.pop(i)
IndexError: pop index out of range

Ух ты – это было неожиданно, не так ли? Вы выскочили только каждый второй элемент из списка. Почему? Потому что в первой итерации указатель переменной I = 0 Отказ Теперь мы удаляем это из списка. Элемент 1 в списке имеет сейчас индекс 0 после удаления предыдущего ведущего элемента. Но во второй петле итерации ветвивальная переменная имеет индекс I = 1 Отказ Это следующий элемент, который будет выпущен. Но вы пропустили всплывающие элемент 1 из списка в положении индекс 0! В результате появляется только каждый другой элемент.

Альтернативные способы удаления элементов из списка

Существуют некоторые альтернативные способы удаления элементов из списка. Смотрите таблицу обзора:

lst.remove (x) Удалите элемент из списка (по значению)
lst.pop () Удалите элемент из списка (по индексу) и верните элемент
lst.clear () Удалите все элементы из списка
del lst [3] Удалите один или несколько элементов из списка (по индексу или ломтию)
Список понимания Удалите все элементы, которые соответствуют определенному условию

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

Удалить () – Удалить элемент по значению

Чтобы удалить элемент из списка, используйте list.remove (элемент) Метод вы уже видели ранее:

>>> lst = ["Alice", 3, "alice", "Ann", 42]
>>> lst.remove("Ann")
>>> lst
['Alice', 3, 'alice', 42]

Попробуй сам:

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

Удаленный элемент не существует

Если вы пытаетесь удалить элемент X из списка, но X не существует в списке, Python выдает ошибку значений:

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.remove('Frank')
Traceback (most recent call last):
  File "", line 1, in 
    lst.remove('Frank')
ValueError: list.remove(x): x not in list

POP () – удалить элемент по индексу

По умолчанию, POP () Способ удаляет последний элемент из списка и возвращает элемент.

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.pop()
'Ann'
>>> lst
['Alice', 'Bob']

Но вы также можете определить дополнительный аргумент индекса. В этом случае вы удалите элемент в данном индексе – немного известного секрета Python!

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.pop(1)
'Bob'
>>> lst
['Alice', 'Ann']

Очистить () – Удалить все элементы

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

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.clear()
>>> lst
[]

Del – Удалить элементы по индексу или срезам

Этот трюк также относительно неизвестен среди начинающих Python:

  • Использовать del lst [индекс] Чтобы удалить элемент при индексе.
  • Использовать del lst [start: Stop] Чтобы удалить все элементы в ломтик Отказ
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del lst[5]
>>> lst
[0, 1, 2, 3, 4, 6, 7, 8, 9]
>>> del lst[:4]
>>> lst
[4, 6, 7, 8, 9]

Связанные статьи в блоге:

  • Проверьте мой полный урожай нарезки, который делает вас главным слайком через 15 минут или около того!

Понимание списка – удалить элементы условно

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

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

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

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

Вы также можете определить состояние, такое как все нечетные значения х% 2 == 1 в контексте, используя состояние, если. Это приводит нас к способу удаления всех элементов, которые не соответствуют определенным условиям в данном списке.

>>> lst = list(range(10))
>>> lst_new = [x for x in lst if x%2]
>>> lst_new
[1, 3, 5, 7, 9] 

Пока вы повторяете весь список lst , состояние х% 2 требует, чтобы элементы нечетными.

Связанные статьи в блоге:

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

Резюме

list.remove (элемент) Способ устраняет первое вхождение элемент от Список Отказ

Список Python Удалить ()

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

Определение и использование :

list.remove (элемент) Способ удаляет первое возникновение элемент из существующего Список Отказ Это, однако, не удалит все вхождения элемента в списке!

Вот краткий пример:

>>> lst = [1, 2, 99, 4, 99]
>>> lst.remove(99)
>>> lst
[1, 2, 4, 99]

В первой строке примера вы создаете список lst Отказ Затем вы удалите целочисленный элемент 99 из списка, но только его первое вхождение. Результатом является список только с четырьмя элементами [1, 2, 4, 99] Отказ

Попробуй сам:

Синтаксис :

Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.remove (элемент)

Аргументы:

элемент Объект, который вы хотите удалить из списка. Только первый вхождение элемента удаляется.

Возвращаемое значение:

Метод list.remove (элемент) имеет возврат ценности Нет Отказ Он работает в существующем списке и, следовательно, не возвращает новый список с удаленным элементом

Видео:

Код головоломки:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

# Puzzle
presidents = ['Obama',
              'Trump',
              'Washington']
p2 = presidents[:2]
p2.remove('Trump')
print(presidents)
# What's the output of this code snippet?

Вы можете проверить решение на Приложение Finxter Отказ

Обзор :

Существуют некоторые альтернативные способы удаления элементов из списка. Смотрите таблицу обзора:

lst.remove (x) Удалите элемент из списка (по значению)
lst.pop () Удалите элемент из списка (по индексу) и верните элемент
lst.clear () Удалите все элементы из списка
del lst [3] Удалите один или несколько элементов из списка (по индексу или ломтию)
Список понимания Удалите все элементы, которые соответствуют определенному условию

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

Удалить () – Удалить элемент по значению

Чтобы удалить элемент из списка, используйте list.remove (элемент) Метод вы уже видели ранее:

>>> lst = ["Alice", 3, "alice", "Ann", 42]
>>> lst.remove("Ann")
>>> lst
['Alice', 3, 'alice', 42]

Попробуй сам:

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

Удаленный элемент не существует

Если вы пытаетесь удалить элемент X из списка, но X не существует в списке, Python выдает ошибку значений:

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.remove('Frank')
Traceback (most recent call last):
  File "", line 1, in 
    lst.remove('Frank')
ValueError: list.remove(x): x not in list

POP () – удалить элемент по индексу

По умолчанию, POP () Способ удаляет последний элемент из списка и возвращает элемент.

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.pop()
'Ann'
>>> lst
['Alice', 'Bob']

Но вы также можете определить дополнительный аргумент индекса. В этом случае вы удалите элемент в данном индексе – немного известного секрета Python!

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.pop(1)
'Bob'
>>> lst
['Alice', 'Ann']

Очистить () – Удалить все элементы

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

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.clear()
>>> lst
[]

Del – Удалить элементы по индексу или срезам

Этот трюк также относительно неизвестен среди начинающих Python:

  • Использовать del lst [индекс] Чтобы удалить элемент при индексе.
  • Использовать del lst [start: Stop] Чтобы удалить все элементы в ломтик Отказ
>>> lst = list(range(10))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del lst[5]
>>> lst
[0, 1, 2, 3, 4, 6, 7, 8, 9]
>>> del lst[:4]
>>> lst
[4, 6, 7, 8, 9]

Связанные статьи в блоге:

  • Проверьте мой полный урожай нарезки, который делает вас главным слайком через 15 минут или около того!

Понимание списка – удалить элементы условно

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

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

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

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

Вы также можете определить состояние, такое как все нечетные значения х% 2 == 1 в контексте, используя состояние, если. Это приводит нас к способу удаления всех элементов, которые не соответствуют определенным условиям в данном списке.

>>> lst = list(range(10))
>>> lst_new = [x for x in lst if x%2]
>>> lst_new
[1, 3, 5, 7, 9] 

Пока вы повторяете весь список lst , состояние х% 2 требует, чтобы элементы нечетными.

Связанные статьи в блоге:

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

Список Python Удалить () Все

list.remove (x) Способ устраняет только первый вхождение элементов х из списка.

Но что, если вы хотите удалить все вхождения элемента х из данного списка?

Ответ – использовать простой цикл:

lst = ['Ann', 'Ann', 'Ann', 'Alice', 'Ann', 'Bob']
x = 'Ann'

while x in lst:
    lst.remove(x)

print(lst)
# ['Alice', 'Bob']

Вы просто называете Удалить () метод снова и снова до элемента х больше не в списке.

Список Python Удалить дубликаты

Как удалить все дубликаты данного значения в списке?

Наивный подход – пройти каждый элемент и проверять, существует ли этот элемент в списке. Если это так, удалите его. Однако это требует нескольких строк кода.

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

В качестве значений словаря вы просто принимаете фиктивные значения (по умолчанию).

Связанные статьи в блоге:

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

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

Вот код:

>>> lst = [1, 1, 1, 3, 2, 5, 5, 2]
>>> dic = dict.fromkeys(lst)
>>> dic
{1: None, 3: None, 2: None, 5: None}
>>> duplicate_free = list(dic)
>>> duplicate_free
[1, 3, 2, 5]

Список Python Удалить () Если существует

Как удалить элемент из списка, но только если он существует?

Проблема в том, что если вы попытаетесь удалить элемент из списка, который не существует, Python бросает Ошибка ценности Отказ Вы можете избежать этого, проверяя членство в элементе, который будет удален первым:

>>> lst = ['Alice', 'Bob', 'Ann']
>>> lst.remove('Frank') if 'Frank' in lst else None
>>> lst
['Alice', 'Bob', 'Ann']

Это использует функцию One-Liner Python One-Liner условного назначения (также называемого The Terrary Operator).

Связанные статьи в блоге:

  • Проверьте мою тройное урок оператора и повысить свои навыки!

Резюме

list.remove (элемент) Способ устраняет первое вхождение элемент от Список Отказ

Список Python Reverse ()

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

Определение и использование :

То list.reverse () переворачивает порядок элементов в список Отказ Если вы хотите создать новый список с обращенными элементами, используйте нарезку с отрицательным размером шага Список [:: – 1] .

Вот краткий пример:

>>> lst = [1, 2, 3, 4]
>>> lst.reverse()
>>> lst
[4, 3, 2, 1]

В первой строке примера вы создаете список lst Отказ Затем вы поменяете заказ элементов в списке и распечатайте его в оболочку.

Код головоломки – попробуйте сами:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

Вы также можете решить эту головоломку и отслеживать свои навыки Python на нашем интерактивном приложении Finxter.

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python. Вот синтаксис:

list.reverse ()

Аргументы: Обратный метод не принимает аргументов.

Возвращаемое значение: Метод list.reverse () имеет возврат ценности Нет Отказ Это меняет элементы списка (но не создает новый список). Таким образом, возвращаемое значение не требуется.

Список Python Reverse () Сложность времени

Сложность времени из Обратный () Операция o (n) для списка с n элементами. Стандартная реализация Python Cpython «Прикоснутся к всему элементам в исходном списке, чтобы переместить их в другую позицию. Таким образом, момент сложности является линейным в количестве элементов списка.

Вы можете увидеть участок времени сложности Обратный () Метод растущего размера списка здесь:

На рисунке показано, как прошедшее время реверсирующих списков с растущим числом элементов растет линейным до количества элементов.

Если вы заинтересованы в коде, я использовал для генерации этого участка MATPLOTLIB, это он:

import matplotlib.pyplot as plt
import time

y = []
for i in [100000 * j for j in range(10,100)]:
    lst = list(range(i))
    t0 = time.time()
    x = lst.reverse()
    t1 = time.time()
    y.append(t1-t0)


plt.plot(y)
plt.xlabel("List elements (10**5)")
plt.ylabel("Time (sec)")
plt.show()

Список Python Reverse () на месте

Если вы позвоните list.reverse () Способ на любом объекте списка в Python он меняет элементы списка этот конкретный объект списка. Вы говорите, что обратный метод происходит на месте Отказ

Это распространенная ошибка многих начинающих Python. Они предполагают, что Обратный () Метод создает новый список с элементами в обращенном порядке. Это не так: Обратный () Метод изменяет только существующий объект списка.

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

>>> lst = [1, 2, 3]
>>> lst.reverse()
>>> lst
[3, 2, 1]

В примере вы только перевернули существующий список lst Отказ Но вы не создали новый список!

Список Python Reverse () Нет

Возвращаемое значение list.reverse () Метод это Нет Отказ Почему? Потому что метод меняет список на месте. Это означает, что новый список не создан. Вместо этого метод модифицирует старый объект списка.

Вы видели пример этого в предыдущем разделе.

Обратный список списка Python без обратного ()

Вы также можете перевернуть список без использования метода Reverse (). Давайте посмотрим на следующую таблицу, которая показывает все альтернативы Reverse ():

lst.reverse () Переверняет порядок элементов списка LST на месте.
Список (обратный (LST)) Встроенный обратный (LST) метод создает новый объект списка с элементами обратного списка.
lst [:: – 1] Нарезка с негативной индексацией является наиболее лаконичным способом обращения по порядку списка. Это создает новый объект списка.
[lst [i] для i в пределах досягаемости (len (lst) -1, -1, -1)] Просто для удовольствия – одноклассное решение для изменения списка с использованием понимания списка и функции отрицательного диапазона.

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

Список Python обратный рекурсивный

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

>>> reverse = lambda lst: reverse(lst[1:]) + [lst[0]] if lst else []

Давайте проверим, это делает то, что он должен делать (отменить список):

>>> reverse([1, 2, 3])
[3, 2, 1]
>>> reverse(["Ann", 1, 42, 0])
[0, 42, 1, 'Ann']
>>> reverse([])
[]
>>> reverse([1])
[1]

Хорошо, это работает!

Рекурсивное решение однонаправления использует несколько функций Python, которые вы должны понимать, прежде чем вы сможете полностью понять это полностью:

  • Лямбда функция лямбда х: y Создает анонимную функцию с аргументом х и возвращаемое значение y Отказ Вы можете прочитать подробный учебник по блоге Finxter.
  • Список конкатенации [A, B, C] + [D] Создает новый список [A, B, C, D] Отказ Вы можете прочитать подробный учебник по блоге Finxter.
  • Нарезка lst [Start: Stop] выкрой подпоследовательность из списка между Начать и Стоп Индексы. Вы можете прочитать подробный учебник по блоге Finxter.
  • Тернарный оператор X Если вы еще Z Возвращает значение х Если y это Правда Отказ Во всех других случаях он возвращает значение z Отказ Вы можете прочитать подробный учебник по блоге Finxter.

Фу! Довольно некоторая информация для переваривания! Но это не все. Если вы поняли все вышеперечисленное, вам также нужно понимать рекурсию. Это слишком много, чтобы учить в одном абзаце, поэтому я отправлю вас в свою статью в блоге о рекурсии.

Я скажу только так: чтобы понять рекурсию, вы сначала должны понимать рекурсию! 😉.

Список Python обратный ломтик

Нарезка – самый простой способ отменить список.

Чтобы изменить список lst Вы просто используете операцию нарезки lst [:: - 1] С умолчанию Начать и Стоп Индексы (не даны) и отрицательный размер шага -1 (данный).

Есть только один случай, когда вы не должны использовать Slicing, чтобы изменить список, и это если вы не хотите создавать новый список. В этом случае придерживайтесь lst.reverse () Метод, который переводит список на месте.

Вот пример нарезки, чтобы изменить данный список:

>>> friends = ["Ann", "Carsten", "Bob", "Alice"]
>>> r_friends = friends[::-1]
>>> friends
['Ann', 'Carsten', 'Bob', 'Alice']
>>> r_friends
['Alice', 'Bob', 'Carsten', 'Ann']

Вы видите, что два списка друзья и R_friends Независимые объекты в памяти, поскольку операция нарезки создает новый список.

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

  • Введение в нарезку в Python

Список Python обратная копия

Есть два способа скопировать список и обратный порядок его элементов:

  • Используйте нарезку Список [:: - 1] , или
  • Позвоните в Перевернутый (список) Способ и преобразовать результат в список, используя Список (...) конструктор.

Вот как в действии:

>>> lst_1 = ['Alice', 'Bob', 'Ann']
>>> lst_2 = lst_1[::-1]
>>> lst_3 = list(reversed(lst_1))
>>> lst_1
['Alice', 'Bob', 'Ann']
>>> lst_2
['Ann', 'Bob', 'Alice']
>>> lst_3
['Ann', 'Bob', 'Alice']

Список Python Частичное обратное

Частично отменить список lst Используйте нарезку с отрицательным размером шага: lst [Старт: Стоп: -1] Отказ Значения запуска и остановки определяют часть списка, который будет изменен, и размер шага -1 означает, что вы проходите через список в обращенном порядке.

Вот пример некоторых частичных разворотов списка:

>>> lst = ['a', 'b', 'c', 'd', 'e']
>>> lst[5:2:-1]
['e', 'd']
>>> lst[:1:-1]
['e', 'd', 'c']
>>> lst[3:2:-1]
['d']

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

Появление списка Python обратного списка

Вы можете изменить список с мощным методом понимания списка Python. (Хотя я не могу представить сценарий, где это действительно имеет смысл.)

Связанная статья:

  • Введение в список в списке

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

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

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

Вот как вы будете использовать список по поводу понимания списка:

[lst[i] for i in range(len(lst)-1,-1,-1)]

Вы проходите все индексы в отрицательном порядке, начиная с индекса последнего списка ЛЕН (LST) -1 и окончание в первом индексе списка 0. Обратите внимание, что индекс остановки не включен в последовательность индекса, поэтому я использовал значение -1 в качестве индекса остановки для Диапазон () Встроенная функция.

Список Python Reverse () VS обратный ()

В чем разница между методом list.reverse () и встроенная функция Перевернутый (список) ?

  • list.reverse () Изменяет существующий список на месте и переворачивает порядок элементов в этом объекте списка. Новый объект списка не создан.
  • Перевернутый (список) Создает новый намек на изменение порядка элементов оригинала Список Отказ

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

Пример следующий:

>>> lst_1 = [1, 2, 3]
>>> lst_1.reverse()
>>> lst_1
[3, 2, 1]
>>> reversed(lst_1)

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

Питонский список Глубокие обратные

Что, если вы хотите не только поменять список, но запустить глубокую возможность, где все вложенные списки также обращаются в рекурсивную рекурсию?

Вот как вы можете сделать это:

def deep_reverse(lst):
    ''' Reverses a nested list in place'''

    # Reverse top-level list
    lst.reverse()

    # Recursively reverse all nested lists
    for element in lst:
        if isinstance(element, list):
            deep_reverse(element)


lst = [1, 2, 3, [4, 5, 6]]
deep_reverse(lst)
print(lst)

Это генерирует выход:

# OUTPUT: [[6, 5, 4], 3, 2, 1]

Не только список первого уровня полностью обращается, но и список второго уровня. Код слабо вдохновлен от Эта статья Отказ

Список Python обратный перечень

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

Вы можете отменить порядок перечисленных кортежей, укладывая вместе перечислять () Функция и list.reverse () Способ следующим образом:

>>> for i, el in enumerate(list(reversed([1, 2, 3]))):
	print(i, el)

	
0 3
1 2
2 1

Таким образом, вы впервые обратный список, который создает итератор. Затем вы преобразуете его в список. Результат может быть перечислен.

Если вы хотите также поменять заказ индексов, просто переключите порядок обеих функций:

>>> for i, el in reversed(list(enumerate([1, 2, 3]))):
	print(i, el)

	
2 3
1 2
0 1

Первым перечислением вы рассчитываете индексы на основе исходного списка. Затем вы поменяете их во внешнюю функцию.

Список Python обратный итератор

Перевернутый (список) Метод возвращает итератор, а не новый список. Это другое: итератор более эффективен, чем список. Вы можете легко преобразовать объект iTerator в список, используя Список (...) Встроенная функция.

Вот пример:

>>> reversed([1, 2, 3])

>>> for i in reversed([1, 2, 3]):
	print(i)

	
3
2
1

Объект iTerator не выглядит красиво в оболочке, но это более эффективный способ повторять для последовательности значений, чем использование списков. Почему? Потому что списки должны поддерживать все значения в памяти. Итераторы не.

Список Python обратная сортировка

Вы хотите сортировать список в порядке убывания? Используйте Reverse = True Аргумент отсортировано () метод. Вот пример:

>>> sorted([42, 1, 99])
[1, 42, 99]
>>> sorted([42, 1, 99], reverse=True)
[99, 42, 1]

Индекс списка Python Reverse ()

Вместо того, чтобы просто использовать индексы положительного списка, вы также можете использовать обратную индексацию в списках Python. Отрицательный целочисленный индекс -1 обращается к последнему элементу. Отрицательный целочисленный индекс -2 обращается к второму последнему элементу и так далее. Вот пример:

>>> lst = ["Alice", "Bob", "Ann"]
>>> lst[-1]
'Ann'
>>> lst[-2]
'Bob'
>>> lst[-3]
'Alice'

Обратный диапазон списка Python ()

Хотите ли вы повторить ряд целочисленных ценностей в обратном порядке? Скажем, вы хотите повторить количество от 10 до 0 в обратном порядке: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0. Вы можете просто добиться этого, указав Начать , Стоп и шаг Аргументы Диапазон (запуск, остановка, шаг) Метод:

>>> for i in range(10, -1, -1):
	print(i)

	
10
9
8
7
6
5
4
3
2
1
0

Обратите внимание, что Начать Аргумент включен в ассортимент, но Стоп Аргумент не.

Список Python Reverse () не работает

Что если Обратный () Метод не работает? Скорее всего, вы предполагаете list.reverse () Метод имеет возвращаемое значение, которое является обратным списком. Это не тот случай! list.reverse () Метод возвращает Нет Потому что это меняет Список на месте. Это не возвращает новый перевернутый список.

Вот пример того, что вы, вероятно, делаете:

>>> lst = [1, 2, 3]
>>> print(lst)
[1, 2, 3]
>>> print(lst.reverse())
None

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

>>> print(list(reversed([1, 2, 3])))
[3, 2, 1]

обратный () Метод переворачивает список и возвращает перевернутый список в качестве объекта iTerator. Вам необходимо сначала преобразовать его в список, прежде чем печатать его в оболочку (и получать значимый вывод).

Python обратный список numpy

Обратить вспять Numpy Array (или даже список Python), вы можете просто использовать нарезку с отрицательным размером шага А [:: - 1] Отказ Вот пример:

>>> import numpy as np
>>> a = np.array([1, 2, 3])
>>> a[::-1]
array([3, 2, 1])

Резюме

То list.reverse () Метод переворачивает порядок элементов списка.

Сортировка списка Python ()

Каждый компьютерный ученый любит сортировку вещей. В этой статье я покажу вам, как Python делает это – и как вы можете нажать в мощные функции сортировки списков Python.

Определение и использование: list.sort () Метод сортирует элементы списка на месте восходящей способности. Чтобы настроить поведение сортировки по умолчанию, используйте дополнительный ключ Аргумент, передавая функцию, которая возвращает сопоставимое значение для каждого элемента в списке. С дополнительным логическим задний ход аргумент, вы можете переключиться с возрастания ( Reverse = false. ) до по порядку убывания ( Reverse = True ).

Вот краткий обзор пример, который показывает, как использовать аргументы на практике:

# Create an unsorted integer list
lst = [88, 12, 42, 11, 2]

# Sort the list in place (ascending)
lst.sort()
print(lst)
# [2, 11, 12, 42, 88]

# Sort the list (leading number)
lst.sort(key=lambda x: str(x)[0])
print(lst)
# [11, 12, 2, 42, 88]

# Sort the list in place (descending)
lst.sort(reverse=True)
print(lst)
# [88, 42, 12, 11, 2]

В первой строке примера вы создаете список lst Отказ Затем вы разбираетесь в списке один раз, используя поведение сортировки по умолчанию и один раз, используя индивидуальное поведение сортировки только с первой буквой номера. Затем вы поменяете заказ элементов в отсортированном списке, используя Reverse = True аргумент

Код головоломки – попробуйте сами:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

Вы также можете решить эту головоломку и отслеживать свои навыки Python на нашем интерактивном приложении Finxter.

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python ( Python Versions 2.x и 3.x ). Вот синтаксис:

list.sort (ключ = нет,)

Аргументы:

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

Возвращаемое значение: Метод list.sort () Возвращает Нет Независимо от того, на который он называется. Почему? Поскольку он сортирует список на месте и не создает нового списка.

Связанная статья: Методы списков Python [Обзор]

Ключ сортировки списка Python

list.sort () Метод принимает еще одну функцию как необязательный ключ Аргумент, который позволяет изменять поведение сортировки по умолчанию. Затем ключевая функция затем вызывается в элементе каждого списка и возвращает другое значение, основанное на том, на котором выполняется сортировка. Следовательно, ключевая функция принимает один аргумент ввода (элемент списка) и возвращает одно выходное значение (значение, которое можно сравнить).

Вот пример:

>>> lst = [(1,2), (3,2), (3,3), (1,0), (0,1), (4,2), (1,1), (0,2), (0,0)]
>>> lst.sort()
>>> lst
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (3, 2), (3, 3), (4, 2)]
>>> lst.sort(key=lambda x: x[0])
>>> lst
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (3, 2), (3, 3), (4, 2)]
>>> lst.sort(key=lambda x: x[1])
>>> lst
[(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2), (3, 2), (4, 2), (3, 3)]

Вы можете видеть, что в первых двух примерах список сортируется в соответствии с первым значением кортежного кортежа. В третьем примере список сортируется в соответствии со вторым значением кортежа. Вы достигаете этого, определяя ключевую функцию ключ = лямбда х: х [1] это имеет один элемент списка х (кортеж) как аргумент и преобразует его в сопоставимое значение х [1] (второе значение кортежа).

Связанная статья:

  • Введение в лямбда функции в Python

Python List Сортировка itemgetter

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

Например, обычно используют itemgetter () Функция из Оператор Модуль для доступа к I-Th Value Reverable:

>>> from operator import itemgetter
>>> customers = [('alice', 1000), ('bob', 100), ('frank', 10)]
>>> customers.sort(key=itemgetter(1))
[('frank', 10), ('bob', 100), ('alice', 1000)]

itemgetter () Функция делает точно так же, как лямбда Функция В предыдущем примере: он возвращает второе значение кортежа и использует его в качестве основы для сравнения.

Список Python Сортировать с двумя ключами

Как сортировать список с двумя ключами? Например, у вас есть список кортежей [(1,2), (3,2), (3,3), (1,0), (0,1), (4,2), (1,1), (0,2), 0,0)] И вы хотите сначала разобраться после второго ценности кортежа. Но если есть галстук (например, (1,2) и (3,2) ), вы хотите разобраться после первого значения кортежа. Как вы можете это сделать?

По умолчанию Python сортирует кортежи лексикографически – первое значение кортежа считается первым. Только если есть галстук, требуется второе ценность кортежа и так далее.

Итак, чтобы сортировать с «двумя клавишами», вы можете определить ключевую функцию, которая возвращает кортеж, а не только одно значение кортежа. Вот пример:

>>> lst = [(1,2), (3,2), (3,3), (1,0), (0,1), (4,2), (1,1), (0,2), (0,0)]
>>> lst.sort(key=lambda x: (x[1], x[0]))
>>> lst
[(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2), (3, 2), (4, 2), (3, 3)]

Второе значение кортежа имеет приоритет над первым значением кортежа.

Список Python Сортировать с несколькими клавишами

Как сортировать Список С несколькими ключами? Например, у вас есть список кортежей [(1,1,2), (0,0,1), (0,1,0), (0,1,2), (1,4,0)] И вы хотите сначала разобраться после второго ценности кортежа. Но если есть галстук (например, (0,1,0) и (1,1,2) ), вы хотите отсортировать после третьего значения кортежей. Если есть еще один галстук, вы хотите сортировать после первого значения кортежа. Как вы можете это сделать?

По умолчанию Python сортирует кортежи лексикографически – первое значение кортежа считается первым. Только если есть галстук, требуется второе ценность кортежа и так далее.

Итак, чтобы сортировать с «двумя клавишами», вы можете определить ключевую функцию, которая возвращает кортеж, а не только одно значение кортежа. Вот пример:

>>> lst = [(1,1,2), (0,0,1), (0,1,0), (0,1,2), (1,4,0)]
>>> lst.sort()
>>> lst
[(0, 0, 1), (0, 1, 0), (0, 1, 2), (1, 1, 2), (1, 4, 0)]
>>> lst.sort(key=lambda x: (x[1],x[2],x[0]))
>>> lst
[(0, 0, 1), (0, 1, 0), (0, 1, 2), (1, 1, 2), (1, 4, 0)]

Второе значение кортежа имеет приоритет над третьим ценностью кортеля. И третье значение кортеж имеет приоритет над первым ценностью кортежа.

Список Python Сортировать лямбда

Функции лямбда – это анонимные функции, которые не определены в пространстве имен (у них нет имен). В его простейшей форме синтаксис:

лямбда аргумент: выражение.

Вы отображаете аргумент к результату выражения.

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

Вот пример:

>>> from operator import itemgetter
>>> customers = [('alice', 1000), ('bob', 100), ('frank', 10)]
>>> customers.sort(key=lambda x: x[1])
[('frank', 10), ('bob', 100), ('alice', 1000)]

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

Список Python Сортировать со компаратором

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

Есть только одно условие: возвращенные значения должны быть сопоставимыми. В противном случае, как вы ожидали, что список их отсортировать?

Что значит быть сопоставимым? И как вы делаете свой собственный Пользовательский класс Сопоставимо? Для этого необходимо реализовать ряд методов в определении пользовательского класса ( Источник ):

__eq__ ==
__ne__ !=
__lt__ <
__le__ <=
__gt__ >
__ge__ >=

Если вы реализуете все эти методы, вы можете сравнить два элемента легко. Все основные структуры данных Python реализовали их. Так что не беспокойтесь об этом.

Реализация списка Python Sort

Python’s Сортировка процедуры такие как list.sort () и встроенный отсортировано () Используйте Timsort алгоритм (назван в честь его создателя тима Peters).

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

Алгоритм Timsort использует эту идею, поисшив уже отсортированные подпоследовательности, которые могут быть объединены вместе (эти сортированные подпоследовательности называются «Runs» в исходном алгоритмическом описании Timsort). Если вы можете быстро идентифицировать Run, и вы можете быстро объединить те, которые работает в отсортированной последовательности, вы используете существующую (случайное) упорядоченность данных. Многие наборы данных реальных данных уже поставляются со многими такими сорванными «пробегами».

Таким образом, в то время как алгоритм имеет то же самое наихудшее сложность времени O (n log n), сложность времени в лучшем случае o (n). Во многих практических настройках алгоритм превосходит теоретически аналогичные алгоритмы из-за свойства используя существующее упорядочение данных.

Вы можете глубоко погружаться в алгоритм Timsort здесь Отказ

Python List Сортировать сложность

Algorithm Python’s Timsort Algorithm имеет o (n log n) сложность времени в худшем случае и o (n) лучшее сложность времени, если список уже в значительной степени отсортирован. Это также имеет отличное Результаты тестов – Они превосходят многие из лучших алгоритмов сортировки в мире на реальных входных данных.

Производительность в худшем случае
Лучшая производительность
Средняя производительность
Удобность в худшем случае

Ошибка сортировки списка Python

При использовании 2 общих ошибок есть две общие ошибки list.sort () метод.

Список списка Python возвращает ни одного

Возвращаемое значение list.sort () Метод это Нет , но многие кодера ожидают, что это сортированный список. Поэтому они удивлены, узнав, что их переменные содержат Нет Тип, а не отсортированный список.

>>> lst = [10, 5, 7]
>>> a = lst.sort()
>>> print(a)
None

Однако возвращение Нет имеет идеальный смысл для list.sort () метод. Почему? Поскольку вы вызываете метод в объекте списка, и он изменяет этот объект точного списка. Он не создает нового списка – в памяти не будет нового объекта списка.

>>> print(lst)
[5, 7, 10]

Если вы хотите создать новый объект списка, используйте отсортировано () Встроенная функция Python, как это:

>>> sorted([10, 8, 9])
[8, 9, 10]

Python List Сортировать объект «Nonetype» не является ими

Скажем, вы хотите повторить список в отсортированном порядке. Вы хотите использовать list.sort () Метод для достижения этого.

Этот кодовый фрагмент решит проблему, не так ли?

years = [2008, 1999, 2012, 1988]

for year in years.sort():
    print(year)

Но при запуске кода вы получаете следующее сообщение об ошибке:

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 3, in 
    for year in years.sort():
TypeError: 'NoneType' object is not iterable

Почему Типеррор происходить?

Причина в том, что list.sort () Метод возвращает значение Никто Отказ Это не возвращает новый список сортированными значениями (как вы ожидали). Вместо этого он сортирует список на месте. Если вы хотите исправить это и получить новый список сортированными значениями, вам необходимо использовать встроенный Сортировано (список) метод.

Вот пример:

years = [2008, 1999, 2012, 1988]

for year in sorted(years):
    print(year)

Теперь ожидается результат:

1988
1999
2008
2012

Список Python сортирует по алфавиту/лексикологически

Проблема : Учитывая список строк. Сортируйте список строк в алфавитном порядке!

Пример:

['Frank', 'Alice', 'Bob'] --> ['Alice', 'Bob', 'Frank']

Решение : Используйте list.sort () Способ без аргумента для решения списка в лексикографическом порядке, который является обобщением алфавитного порядка (также относится ко второму, третьему, … символам).

lst = ['Frank', 'Alice', 'Bob']
lst.sort()
print(lst)
# ['Alice', 'Bob', 'Frank']

Попробуй сам:

Список Python сортирует в алфавитном порядке

Вы можете поменять порядок списка, используя обратное ключевое слово. Установить Reverse = false Сортировать по возрастанию и установить Reverse = True сортировать в порядке убывания.

lst = ['Frank', 'Alice', 'Bob']

lst.sort(reverse=False)
print(lst)
# ['Alice', 'Bob', 'Frank']

lst.sort(reverse=True)
print(lst)
# ['Frank', 'Bob', 'Alice']

Список Python сортирует по алфавиту и численно

Проблема : У вас есть список строк. Каждая строка содержит номер. Вы хотите, чтобы количество было численно сортировать (например, поставляется, 100 поступает после 20, а не ранее), но символы, чтобы сортировать в алфавитном порядке (например, 'C' приходит до 'd' ).

Пример :

['alice 100', 'alice 20', 'bob 99'] --> ['alice 20', 'alice 100', 'bob 99'

Наивное решение (не работает): Используйте list.sort () Метод сортировки списка в алфавитном порядке:

lst = ['alice 100', 'alice 20', 'bob 99']
lst.sort()
print(lst)
# ['alice 100', 'alice 20', 'bob 99']

Потому что номер 100 наступает до 20 в алфавитном порядке, строка «Алиса 100» размещается до «Алиса 20» Отказ

Решение : Я нашел это Код на Stackoverflow, который красиво демонстрирует, как отсортировать буквенно-цифровой:

import re 

def sorted_nicely(l): 
    """ Sort the given iterable in the way that humans expect.""" 
    convert = lambda text: int(text) if text.isdigit() else text 
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] 
    l.sort(key = alphanum_key)

lst = ['alice 100', 'alice 20', 'bob 99']
sorted_nicely(lst)
print(lst)
# ['alice 20', 'alice 100', 'bob 99']

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

Список сортировки Python с буквами и цифрами

Смотрите предыдущий раздел Список Python сортирует в алфавитном порядке Отказ

Сортировка списка Python

Проблема с по умолчанием list.sort () или Сортировано (список) Метод заключается в том, что они считают капитализацию. Таким образом, это может привести к странным сортировке, как это:

lst = ['ab', 'Ac', 'ad']
lst.sort()
print(lst)
# ['Ac', 'ab', 'ad']

Интуитивно, вы ожидаете, что строка 'ab' произойти до «AC» , верно?

Чтобы игнорировать капитализацию, вы можете просто позвонить в x.lower () Способ на каждом элементе х перед сортировкой списка.

Тем не менее, мой предпочтительный метод состоит в том, чтобы использовать ключевой аргумент для достижения того же в одной строке кода:

lst = ['ab', 'Ac', 'ad']
lst.sort(key=lambda x: x.lower())
print(lst)
# ['ab', 'Ac', 'ad']

Если вам нравятся одноклассники, вам понравится моя новая книга «Python One-Listers» с Nostarch Press (Amazon Link ) Отказ

Список Python Сортировка на месте

Если вы позвоните list.sort () Способ, вы сортируете список объект на месте. Другими словами, вы не создаете новый список с теми же элементами в отсортированном порядке. Нет! Вы сортируете существующий список. Таким образом, все переменные, которые также указывают на этот список в памяти, увидят измененный список.

Вот пример, который точно показывает, что:

lst_1 = ['Bob', 'Alice', 'Frank']
lst_2 = lst_1

lst_1.sort()
print(lst_2)
# ['Alice', 'Bob', 'Frank']

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

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

lst_1 = ['Bob', 'Alice', 'Frank']
lst_2 = sorted(lst_1)

print(lst_1)
# ['Bob', 'Alice', 'Frank']

print(lst_2)
# ['Alice', 'Bob', 'Frank']

Теперь оба списка указывают на отдельные объекты списка в памяти. Таким образом, изменение порядка элементов видна только в список lst_2 Отказ

Сортировка списка Python по возрастанию против нисходящего (обратное)

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

lst_1 = ['Bob', 'Alice', 'Frank']
lst_1.sort()
print(lst_1)
# ['Alice', 'Bob', 'Frank']


lst_2 = [10, 8, 11, 2, 1]
lst_2.sort()
print(lst_2)
# [1, 2, 8, 10, 11]

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

  • Используйте list.sort (Reverse = True) Метод с Reverse = True аргумент
  • Используйте нарезку Список [:: - 1] Чтобы изменить порядок списка.

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

Вот пример:

lst_1 = ['Bob', 'Alice', 'Frank']
lst_1.sort(reverse=True)
print(lst_1)
# ['Frank', 'Bob', 'Alice']


lst_2 = [10, 8, 11, 2, 1]
lst_2.sort()
lst_2 = lst_2[::-1]
print(lst_2)
# [11, 10, 8, 2, 1]

Как вы видите, используя Reverse = True Аргумент красивее в большинстве случаев.

Индекс сортировки списка Python (argsort)

Что, если вы хотите сортировать список, но вы хотите иметь только индексы отсортированных элементов?

Проблема : Скажи, у вас есть список [«Боб», «Алиса», «Карл»] И вы заинтересованы в отсортированных индексах [1, 0, 2] Отказ

Решение : Существует много чистых питонов в Интернете, но простейшее и эффективное решение – это «стоять на плечах гигантов» и использовать Numpy Library – в частности, np.argsort () метод.

Вот как:

import numpy as np

lst = ['Bob', 'Alice', 'Carl']
sorted_indices = np.argsort(lst)
print(sorted_indices)
# [1 0 2]

Зачем смотреть дальше, чем это? Если вам нужен результат, чтобы быть список, то не стесняйтесь преобразовать его, используя Список (...) конструктор.

Связанная статья:

  • Введение в Numpy

Python сортирует список строк

Как вы можете сортировать список строк? Нет никакой разницы – просто используйте нормальный list.sort () метод. Если вам нужно сортировать буквенно-цифровой способ, то используйте подсказки выше (см. Раздел Список Python Сортировать по алфавиту ).

Вот минимальный пример:

lst = ['Bob', 'Alice', 'Carl']
lst.sort()
print(lst)
# ['Alice', 'Bob', 'Carl']

Python сортирует список поплавков

Вы можете отсортировать список поплавков, таких как вы сортировка любого другого списка. Нет никакой разницы:

lst = [101.0, 20.9, 13.4, 106.4]
lst.sort()
print(lst)
# [13.4, 20.9, 101.0, 106.4]

Сортировка по умолчанию числовых значений находится в порядке возрастания.

Тем не менее, что, если у вас есть список поплавков, данных в виде строковых значений? Это может привести к неожиданному поведению:

lst = ['101.0', '20.9', '13.4', '106.4']
lst.sort()
print(lst)
# ['101.0', '106.4', '13.4', '20.9']

Список «Сортировка» выглядит странно. Проблема в том, что строки сортируются в алфавитном порядке, не численно. Письмо '1' приходит до письма '2' в алфавите Unicode. Вот почему номер '101.0' приходит до '20 .9 ' – Если последний является меньшим числовым значением.

Если вы хотите сортировать список численно, вы должны преобразовать все значения списка на плавает первый. Самый простой способ сделать это – использовать поплавок () Встроенная функция преобразования Python в качестве ключевого аргумента lst.sort () метод.

lst = ['101.0', '20.9', '13.4', '106.4']
lst.sort(key=float)
print(lst)
# ['13.4', '20.9', '101.0', '106.4']

Таким образом, вы сохраняете тип строкового типа, потому что значения списка на самом деле не изменяются. Но вы связываете новое «ценность» к каждому элементу списка через функцию ключа – соответствующее значение поплавкового элемента строкового элемента.

Python сортирует список кортежей

Проблема : Скажем, у вас есть список кортежей [(1,1,2), (0,0,1), (0,1,0), (0,1,2), (1,4,0)] И вы хотите сначала разобраться после второго ценности кортежа. Но если есть галстук (например, (0,1,0) и (1,1,2) ), вы хотите отсортировать после третьего значения кортежей. Если есть еще один галстук, вы хотите сортировать после первого значения кортежа. Как вы можете это сделать?

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

Решение : Определите функцию ключевой функции, которая возвращает кортеж, а не только одно значение кортежа. Вот пример:

>>> lst = [(1,1,2), (0,0,1), (0,1,0), (0,1,2), (1,4,0)]
>>> lst.sort()
>>> lst
[(0, 0, 1), (0, 1, 0), (0, 1, 2), (1, 1, 2), (1, 4, 0)]
>>> lst.sort(key=lambda x: (x[1],x[2],x[0]))
>>> lst
[(0, 0, 1), (0, 1, 0), (0, 1, 2), (1, 1, 2), (1, 4, 0)]

Второе значение кортежа имеет приоритет над третьим ценностью кортеля. И третье значение кортеж имеет приоритет над первым ценностью кортежа.

Python сортирует список словарей

Далее вы собираетесь учиться Как сортировать список словарей во всех возможных вариациях. [ 1 ] Так что давайте начнем!

Как сортировать список Словари По стоимости?

Проблема : Учитывая список словарей. Каждый словарь состоит из нескольких (ключ, стоимости) пар. Вы хотите отсортировать их по значению определенного ключа словаря ( атрибут ). Как вы сортируете этот словарь?

Минимальный пример : Рассмотрим следующий пример, где вы хотите отсортировать список складских наплат по значению ключа «Алиса» Отказ

salaries = [{'Alice': 100000, 'Bob': 24000},
            {'Alice': 121000, 'Bob': 48000},
            {'Alice': 12000, 'Bob': 66000}]

sorted_salaries = # ... Sorting Magic Here ...

print(sorted_salaries)

Вывод должен выглядеть так, где зарплата Алисы определяет порядок словарей:

[{'Alice': 12000, 'Bob': 66000},
{'Alice': 100000, 'Bob': 24000},
{'Alice': 121000, 'Bob': 48000}]

Решение : У вас есть два основных способа сделать это – оба основаны на определении ключевой функции методов сортировки Python. Основная функция отображает каждый элемент списка (в нашем случае словарь) к одному значению, которое можно использовать в качестве основы сравнения.

  • Используйте функцию лямбда в качестве функции ключа, чтобы сортировать список словарей.
  • Используйте функцию itemGetter в качестве функции ключа, чтобы сортировать список словарей.

Вот код первого варианта, используя функцию лямбда, которая возвращает значение ключа «Алиса» из каждого словаря:

# Create the dictionary of Bob's and Alice's salary data
salaries = [{'Alice': 100000, 'Bob': 24000},
            {'Alice': 121000, 'Bob': 48000},
            {'Alice': 12000, 'Bob': 66000}]

# Use the sorted() function with key argument to create a new dic.
# Each dictionary list element is "reduced" to the value stored for key 'Alice'
sorted_salaries = sorted(salaries, key=lambda d: d['Alice'])

# Print everything to the shell
print(sorted_salaries)

Вывод – это сортированный словарь. Обратите внимание, что первый словарь имеет самую маленькую зарплату Алисы, а третий словарь имеет наибольшую зарплату Алисы.

[{'Alice': 12000, 'Bob': 66000},
 {'Alice': 100000, 'Bob': 24000},
 {'Alice': 121000, 'Bob': 48000}]

Попробуй сам:

Вы узнаете о втором пути ниже (где вы используете itemgetter Функция из оператора Module).

Сопутствующие статьи на блоге Finxter:

  • Как сортировать список словарей в Python [полное руководство]
  • Лямбда функции
  • Словари

Синтеровка списка Python Удалить дубликаты (сортировка + уникальные)

Идея : До Удалить дубликаты Из списка вы можете сначала отсортировать список, а затем перейти через список один раз и удалить дубликаты. Поскольку список отсортирован, дубликаты появятся бок о бок. Это облегчает их обнаружить.

Сложность времени выполнения : Скажи, у вас есть список [1, 10, 3, 2, 3, 1, 11, 10] Отказ Если вы пройдете на каждый элемент и проверьте, существует ли этот элемент в другом положении, сложность выполнения является O (N²) для N элементов. Но если вы сначала сортируете список, сложность выполнения является только O (n log n) для сортировки. Перейти через сортированный список [1, 1, 2, 3, 3, 10, 10, 11] Еще раз находить последующие дубликаты только O (N), поэтому общая сложность выполнения отсортированного дубликата обнаружения является O (n log n).

Решение : Рассмотрим следующий код.

lst = [1, 10, 3, 2, 3, 1, 11, 10]
lst.sort()

index = 0
while index < len(lst) - 1:
    if lst[index] == lst[index+1]:
        lst.pop(index)
    index = index + 1

print(lst)
# [1, 2, 3, 10, 11]

Обсуждение : Мы отслеживаем текущий индекс, который идет слева направо по списку и удаляет элемент, если его преемник в списке является дубликатом. Таким образом, вы удалите все дубликаты из отсортированного списка.

Альтернативы : Вы также можете преобразовать список в Установить и обратно в список для удаления дубликатов. Это имеет сложность выполнения только O (N) и, следовательно, более эффективно.

lst = [1, 10, 3, 2, 3, 1, 11, 10]
dup_free = list(set(lst))
print(dup_free)
# [1, 2, 3, 10, 11]

Python List Quicksort.

Quicksort – это не только популярный вопрос во многих кодовых интервью – спросил Google, Facebook и Amazon – но и практичный алгоритм сортировки, который быстро, кратко и читается. Из-за своей красоты вы не найдете много классов «вступления к алгоритмам», которые не обсуждают алгоритм Quicksort.

QuickSort сортирует список, рекурсивно разделяя большую проблему (сортируя список) в меньшие проблемы (сортировка двух меньших списков) и объединение решений от меньших проблем таким образом, чтобы она решала большую проблему. Чтобы решить каждую меньшую проблему, та же самая стратегия используется рекурсивно: меньшие проблемы делятся на даже меньшие подпруты, решающие отдельно и объединенные. В связи с этой стратегией Quicksort принадлежит к классу алгоритмов «разделить и завоевать». Давайте погрузиться глубже в алгоритм Quicksort:

Основная идея QuickSort состоит в том, чтобы выбрать элемент поворота, а затем размещать все элементы, которые больше или равны, чем элемент поворота вправо и все элементы, которые меньше, чем элемент поворота влево. Теперь вы разделили большую проблему сортировки списка на две меньшие подпруты: сортировка права и левой раздел списка. То, что вы делаете сейчас, это рекурсивно повторить эту процедуру, пока вы не получите список нулевых элементов. Этот список уже отсортирован, поэтому рекурсион завершается.

На следующем рисунке показан алгоритм Quicksort в действии:

Фигура : Алгоритм QuickSort выбирает элемент поворота, разбивает список в (i) несортированным подсредством со всеми элементами, меньшими или равными, чем Pivot, и (ii) несортированным подсудистом со всеми элементами, которые больше, чем у пивота. Далее алгоритм Quicksort рекурсивно называется двумя несортированными сублистами, чтобы сортировать их. Как только сублисты содержат максимально один элемент, они отсортированы по определению – заканчивается рекурсион. На каждом уровне рекурсии три сублисты (слева, поворот, справа) объединяются до того, как результирующий список передан на более высокий уровень рекурсиона.

Вот реализация одноклассника Python из моего нового Python One-listers Book (Amazon Link).

## The Data
unsorted = [33, 2, 3, 45, 6, 54, 33]


## The One-Liner
q = lambda l: q([x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else []

 
## The Result
print(q(unsorted))

Если вам нужно пояснение, проверьте мою более глубокую статью в блоге об этой реализации Anly Liner Quicksort:

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

  • Самое короткое внедрение Quicksort в Python

Список Python Sort Len

Проблема : Учитывая список строк. Как вы можете отсортировать их по длине?

Пример : Вы хотите сортировать свой список строк [«AAAA», «BBB», «CC», «D»] по длине, начиная с кратчайшей строки. Таким образом, результат должен быть [«D», «CC», «BBB», «AAAA»] Отказ Как это добиться?

Решение : Используйте Лен () Функция как ключевой аргумент list.sort () Метод такой: list.sort (Key = Len) Отказ Как Лен () Функция – это встроенная функция Python, вам не нужно импортировать или определять что-либо еще.

Вот решение кода:

lst = ['aaaa', 'bbb', 'cc', 'd']
lst.sort(key=len)
print(lst)

Вывод – это список, отсортированный по длине строки:

['d', 'cc', 'bbb', 'aaaa']

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

Срок службы списка Python

Проблема : Учитывая перечисленный список (индекс, стоимость) пар. Как вы можете отсортировать список по значению?

Пример : У вас есть список [«Алиса», «Боб», «Энн» , ‘Откровенный’]. Перечисленный список Список (перечисление («Алиса», «Боб», «Энн», «Фрэнк»])) == [(0, «Алиса»), (1, «Боб»), (2, «Энн»), (3, «Фрэнк»)]] Отказ Как вы можете отсортировать это по значению.

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

Вот решение кода:

lst = ['Alice', 'Bob', 'Ann', 'Frank']
en_lst = list(enumerate(lst))
en_lst.sort(key=lambda x: x[1])
print(en_lst)

Выход – это список, отсортированный по значению перечисленного списка.

[(0, 'Alice'), (2, 'Ann'), (1, 'Bob'), (3, 'Frank')]

Python List Сортировка Zip

Проблема : Как сортировать Zains Список по значению?

Пример : Учитывая два списка [5, 7, 9] и [«Алиса», «Боб», «Энн»] Отказ Молни им вместе, чтобы получить [(5, «Алиса»), (7, «Боб»), (9, «ANN»)] Отказ Как сортировать этот список по значению (I.E., второе значение кортежа).

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

Вот решение кода:

a = [5, 7, 9]
b = ['Alice', 'Bob', 'Ann']
zipped = list(zip(a, b))
# [(5, 'Alice'), (7, 'Bob'), (9, 'Ann')]
zipped.sort(key=lambda x: x[1])
print(zipped)

Вот выход из отсортированного списка на молнии:

[(5, 'Alice'), (9, 'Ann'), (7, 'Bob')]

Срок службы Python, кроме первого элемента

Проблема : Как сортировать список, кроме первого элемента? Первый элемент должен оставаться в первой позиции.

Пример : Учитывая список [99, 3, 8, 1, 12] Отказ После сортировки вы хотите почти отсортированный список [99, 1, 3, 8, 12] Отказ Только первый элемент игнорируется процедурой сортировки.

Решение : Вы используете отсортировано (считать) Функция для возврата нового списка. Как сортировать, вы используете все элементы исходного списка, кроме первого. Нарезка помогает вам вырезать этот сублистский. Тогда вы используете Список конкатенации Чтобы склеить сортированный подсудист и первый элемент списка.

Вот решение кода:

lst = [99, 3, 8, 1, 12]
lst_2 = lst[:1] + sorted(lst[1:])
print(lst_2)

Вот выход из отсортированного списка на молнии:

[99, 1, 3, 8, 12]

Сортировка списка Python Sort

Проблема : Сортировать файл в алфавитном порядке, строка по линии.

Пример : Скажем, у вас есть следующий файл "chat.txt" который содержит некоторые временные метки сообщений в чате.

2014-05-12: hi
2020-07-13: Python is great
2020-07-12: Is Python great?
2014-06-01: how are you?

Вы хотите следующий отсортированный файл/строка:

2014-05-12: hi
2014-06-01: how are you?
2020-07-12: Is Python great?
2020-07-13: Python is great

Как вы можете отсортировать этот файл в Python?

Решение : Вы используете краткий одноклассник для загрузки содержимого файла в список строк, по одному для каждой строки. Затем вы сортируете список.

Вот код:

lines = [line for line in open('chat.txt')]
lines.sort()
print(lines)

Вывод – это следующий отсортированный список:

['2014-05-12: hi\n', 
'2014-06-01: how are you?', 
'2020-07-12: Is Python great?\n', 
'2020-07-13: Python is great\n']

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

lines = [line.strip() for line in open('chat.txt')]

Python List Сортировать VS сортируется

Какая разница между список .sorted () метод Списки Python и то отсортировано () Встроенная функция? Учитывая список …

  • Метод list.sort () сортирует данный список на месте. Это не создает новый список.
  • Встроенная функция Python отсортировано () Создает новый объект списка с отсортированными элементами.

Возвращаемое значение list.sort () Метод это Нет Но многие кодера ожидают, что это сортированный список. Поэтому они удивлены, узнав, что их переменные содержат Нет Тип, а не отсортированный список.

>>> lst = [10, 5, 7]
>>> a = lst.sort()
>>> print(a)
None

Однако возвращение Нет имеет идеальный смысл для list.sort () метод. Почему? Поскольку вы вызываете метод в объекте списка, и он изменяет этот объект точного списка. Он не создает нового списка – в памяти не будет нового объекта списка.

>>> print(lst)
[5, 7, 10]

Если вы хотите создать новый объект списка, используйте отсортировано () Встроенная функция Python, как это:

>>> sorted([10, 8, 9])
[8, 9, 10]

Сложность указателя списка Python

Для простоты вот питон эквивалентен реализации с некоторыми основными упрощениями, которые не изменяют общую сложность:

def index(value, lst):
    for i, el in enumerate(lst):
        if el==value:
            return i
    raise Exception('ValueError')

print(index(42, [1, 2, 42, 99]))
# 2

print(index("Alice", [1, 2, 3]))
'''
Traceback (most recent call last):
  File "C:UsersxcentDesktopcode.py", line 10, in 
    print(index("Alice", [1, 2, 3]))
  File "C:UsersxcentDesktopcode.py", line 5, in index
    raise Exception('ValueError')
Exception: ValueError
'''

Я знаю, что это не идеальная репликация вышеуказанного кода C ++. Но этого достаточно, чтобы увидеть вычислительное (выполнение) сложность list.index (значение) метод.

Индекс () Метод имеет линейную сложность выполнения в количестве элементов списка. Для N Элементы, сложность времени выполнения – O (n) Поскольку в худшем случае вам нужно повторить каждый элемент в списке, чтобы найти, что элемент не появляется в нем.

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

Вы можете увидеть участок времени сложности Индекс () Метод растущего размера списка здесь:

На рисунке показано, как прошедшее время нахождения элемента последнего списка в списке. Этот эксперимент повторяется для растущего количества элементов. Время выполнения растет линейным до количества элементов.

Если вы заинтересованы в коде, я использовал для генерации этого участка MATPLOTLIB, это он:

import matplotlib.pyplot as plt
import time

y = []
for i in [100000 * j for j in range(10,100)]:
    lst = list(range(i))
    t0 = time.time()
    x = lst.count(-99)
    t1 = time.time()
    y.append(t1-t0)


plt.plot(y)
plt.xlabel("List elements (10**5)")
plt.ylabel("Time (sec)")
plt.show()

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

  • Методы списка Python – простой обзор
  • Как начать изучать Python?

Методы списка Python Fide Safe

У вас есть несколько потоков, которые одновременно получают доступ к вашему списку? Тогда вы должны быть уверены, что операции списка на самом деле резьба безопасна Отказ

Другими словами: вы можете позвонить любому списку в двух потоках в том же списке одновременно? (И вы можете быть уверены, что результат является значимым?)

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

Единственное, что вам нужно знать, состоит в том, что каждая основная операция в реализации CPYPHON является атомный Отказ Он выполнен полностью и сразу, прежде чем любой другой поток имеет возможность запустить на одном виртуальном двигателе. Поэтому нет условий расы. Примером такого состояния гонки будет следующим: Первый поток считывает значение из списка, второй поток перезаписывает значение, и первая тема перезаписывает значение снова недействительным в операции второго потока.

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

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

То list.sort () Метод сортирует элементы списка на месте восходящей способности. Чтобы настроить поведение сортировки по умолчанию, используйте дополнительный ключ Аргумент, передавая функцию, которая возвращает сопоставимое значение для каждого элемента в списке. С дополнительным логическим задний ход аргумент, вы можете переключиться с возрастания ( Reverse = false. ) до по порядку убывания ( Reverse = True ).

Если вы продолжаете бороться с теми основными командами Python, и вы чувствуете застрявшие в своем прогрессе обучения, у меня есть что-то для вас: Python One-listers (Amazon Link).

В книге я дам вам тщательный обзор темы критических компьютерных наук, таких как машинное обучение, регулярное выражение, наука о данных, Numpy и Python Basics – все в одной линейке кода Python!

Получите книгу от Amazon!

Официальная книга Описание: Python One-Listers покажет читателям, как выполнить полезные задачи с одной строкой кода Python. Следуя краткому переподготовку Python, книга охватывает важные продвинутые темы, такие как нарезка, понимание списка, вещание, функции лямбда, алгоритмы, регулярные выражения, нейронные сети, логистические регрессии и др .. Каждая из 50 секций книг вводит проблему для решения, проходит читателя через навыки, необходимые для решения этой проблемы, затем предоставляет краткое однонаправленное решение Python с подробным объяснением.

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

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

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