Добро пожаловать в общедоступный номер: специалист по данным python
【Ключевые моменты, которые стоит увидеть в первую очередь】
1. Обзор типов данных контейнера в python
2. Три преимущества неоднородности типов списков, упорядоченности и локальной изменчивости.
3. Базовые операции со списками (добавление, удаление, изменение, сегментный индекс)
4. Присвоение фрагментов и локальная сортировка списков
[Сестра сказала] Сегодня я начала изучать Python, но с чего же нам начать?
В Python есть метод, называемый"контейнер"Он используется для хранения других типов предметов, таких как коробка для канцелярских принадлежностей, которую я использовал, когда был ребенком, в которой лежали карандаши, линейки, ластики и т. д. Когда многие люди просто используют Python, они часто первыми контактируют с этим объектом-контейнером, напримерсписок, словарь, кортежи Т. Д. Они полнофункциональны, просты в использовании и могут решить множество практических задач.
Итак, в первом сезоне давайте начнем с этих простых в использовании и практичных контейнеров Python, первый из которых представит список:
Списки Python очень гибкие, ониТри преимущества, давайте поговорим о них один за другим, после разговора об этих трех преимуществах, в основном мы освоили основную работу со списком:
Первое преимущество:
В список можно установить все, что угодно, то есть он может содержать объекты разного типа и любого типа, и даже вложенные списки.Профессиональным словом называется: неоднородность;
Давайте посмотрим на пример:
L1 = [1, 2, 3, 4, 5]
L2 = [1, 'spam', [2.3, 4]]
L3 = []
Глядя на процесс инициализации этих трех списков, неоднородность очевидна, особенно список L2, который содержит несколько разных типов данных одновременно и даже вложенные списки.
Второе преимущество:
Элементы в списке расположены по порядку.Вы можете получить один элемент в соответствии с порядковым номером позиции, или вы можете использовать метод нарезки для получения нескольких последовательных элементов.Профессиональный термин называется: упорядочивание.
Индексация по номеру позиции, например L1[2], — это самый простой способ доступа к элементам в списке. Позвольте мне сосредоточиться на уникальном использовании операций сегментирования. Давайте посмотрим на этот пример:
L = [1,2,3,4,5,6,7,8]
print(L[1:3])
[2, 3]
Берем фрагмент из списка L слева направо. Относительно соответствия между левой и правой границами отсеченного отрезка и значением индекса нам нужно только запомнить такую формулу«Слева закрыто, справа открыто»Нормально:
Первый параметр 1 в индексе осколка представляет собой индекс 1, начинающийся слева (считая с 0), поэтому начальным элементом является целое число 2, а второй параметр 3 представляет значение индекса 3, которое заканчивается справа, то есть Целое число 4, но помните, что оно не входит в усеченную последовательность.
Существует несколько распространенных применений шардинга:
Если индекс завершения опущен, значит перехвачено до конца:
L = [1,2,3,4,5,6,7,8]
print(L[1:])
[2, 3, 4, 5, 6, 7, 8]
Точно так же, еслиопустить начальный индекс, значит начать перехват со стартового элемента:
L = [1,2,3,4,5,6,7,8]
print(L[:4])
[1, 2, 3, 4]
также можно использоватьотрицательный индекс, в настоящее время мы все используем положительный индекс, то есть значение индекса слева направо, значение индекса крайнего левого равно 0, а 1 добавляется справа; существует также обозначение отрицательного индекса, то есть подсчет справа налево, самая правая часть равна -1, а левая часть вычитается на 1, то есть -2, -3 и так далее:
L = [1,2,3,4,5,6,7,8]
print(L[3:-1])
[4, 5, 6, 7]
[Сестра спросила]: Тогда я хочу прыгнуть и перехватить его?
Затем используйте третий параметр, параметр значения шага.Значение по умолчанию равно 1, то есть 1 берется рядом с 1. Если мы хотим прыгать и перехватывать, мы должны установить этот параметр шага специально.
L = [1,2,3,4,5,6,7,8]
print(L[0::2])
[1, 3, 5, 7]
В этот момент[Девушка задала очень содержательный вопрос]: Если я изменю вырезанный фрагмент, это повлияет на исходный список?
Тогда мы все еще верим:
L = [1,2,3,4,5,6,7,8]
b = L[3:-1]
print('before change:b={}'.format(b))
b[0]=111
print('after change:b={}'.format(b))
print('after change:L={}'.format(L))
before change:b=[4, 5, 6, 7]
after change:b=[111, 5, 6, 7]
after change:L=[1, 2, 3, 4, 5, 6, 7, 8]
Очевидно, что после разрезания исходного списка L получается совершенно новый список. После получения шарда L с переменной b суть в том, чтобы получить новую независимую копию шарда L. Следовательно, если вы внесете изменения в список b, это не повлияет на L.
Третье преимущество:
Размер и содержимое списка можно изменять по желанию, при вставке, удалении и изменении элементов списка нет необходимости создавать новую копию списка, а непосредственно изменять объект списка по исходному адресу памяти. Это называется "локально модифицируемый"
Давайте сначала рассмотрим три сценария использования для добавления новых элементов:
L = [1,2,3,4]
L.append(5)
print(L)
[1, 2, 3, 4, 5]
L = [1,2,3,4]
L.insert(1,10)
print(L)
[1, 10, 2, 3, 4]
L = [1,2,3,4]
L.extend([11,22,33])
print(L)
[1, 2, 3, 4, 11, 22, 33]
Эти три использования несколько отличаются,appendМетоды можно добавлять только в конце;insertМетод можно добавить в любую позицию, например, в приведенном выше примере мы добавляем элемент 10, где позиция индекса списка равна 1. Если указанное значение индекса больше, чем общая длина последовательности, он будет автоматически добавлено в конец;extendметод, вы можете добавить несколько элементов в конце одновременно
В это время [девушка оперировала его сама]:
L = [1,2,3,4,5]
L = L.insert(6,2)
print(L[2])
Traceback (most recent call last):
File "E:/12homework/12homework.py", line 3, in <module>
print(L[2])
TypeError: 'NoneType' object is not subscriptable
Тогда нет тогда. . . Здесь совершается распространенная ошибка, поскольку мы сказали, что вставки — это модификации на месте, а не возвращение нового измененного списка. Метод Insert возвращает значение None. Другими словами, вы полностью потеряете ссылку на предыдущий список. Поскольку вы присваиваете значение None для L, вы не сможете найти предыдущий список. То же самое касается методов append и extend.
Удалить, существует несколько сценариев использования в соответствии с требованиями использования:
Самый простой и прямой метод — использовать метод удаления для передачи указанного объекта для удаления.Примечание: он также удаляется на месте в исходном списке, а возвращаемое значение — None.
L1 = ['aa','bb','cc']
L1.remove('aa')
print(L1)
['bb', 'cc']
Обратите внимание, что есть также встроенный метод del, который имеет дополнительную функцию удаления шарда в списке.
del L1[1:3]
Существует также метод pop, который удаляет элемент в конце и может вернуть удаленный элемент в качестве возвращаемого значения вызывающей стороне.
L1 = [1,2,3]
print(L1.pop())#末端删除一个元素,弹出删除的值
print(L1)
3
[1, 2]
[Сестра спрашивает] Тогда модификация элемента, кроме случая прямого использования индекса для модификации элемента, какие еще есть интересные варианты использования?
L = [4,5,6,7,8,9]
L[0] = 0
Тогда должно быть что-то интересное, в основном, чтобы сказатьНазначение фрагментаилокальная сортировкаЭти два вопроса:
L = [4,5,6,7,8,9]
L[1:3] = ['aa','bb','cc','dd']
print(L)
[4, 'aa', 'bb', 'cc', 'dd', 7, 8, 9]
Суть назначения сегмента заключается в том, чтобы сначала удалить указанный сегмент из исходного списка, а затем вставить новый список в удаленную позицию, поэтому длины левой и правой сторон могут быть неравными.
Локальная сортировка очень удобна, см. следующий пример, чтобы понять. Обратите внимание, что сортировка также изменяется локально, вместо того, чтобы возвращать отсортированный список в качестве возвращаемого значения.
L = [1,5,3,8,3,2,10]
L.sort()
print(L)
L.reverse()
print(L)
[1, 2, 3, 3, 5, 8, 10]
[10, 8, 5, 3, 3, 2, 1]
[Сестра сказала] Конечно, с так называемыми тремя основными преимуществами покончено, и основы использования списков понятны.В следующий раз давайте поговорим о словарях и кортежах.
Добро пожаловать в общедоступный номер: специалист по данным python
QR-код официального аккаунта: