Списки, кортежи, наборы, словари ... Какую встроенную структуру данных вы используете?
Python - это язык объектно-ориентированного программирования (ООП). Классы и объекты используются для структурирования и модулирования кода, чтобы его можно было повторно использовать и легко модифицировать. ООП требует использования структур данных для организации и хранения данных таким образом, чтобы к ним можно было получить эффективный доступ.
Python имеет примитивные (или базовые) структуры данных, такие как числа с плавающей запятой, целые числа, строки и логические значения. Python также имеет непримитивные структуры данных, такие как списки, кортежи, словари и наборы. Непримитивные структуры данных хранят набор значений в различных форматах, а не одно значение. Некоторые из них могут содержать структуры данных в структуре данных, создавая глубину и сложность в возможностях хранения данных.
В этой статье мы рассмотрим каждую встроенную структуру данных, чтобы решить, когда ее лучше использовать.
Что такое изменчивость?
Изменяемость означает, что данные в структуре данных могут быть изменены (добавлены, удалены или изменены) после создания. Изменяемость - важный фактор, который следует учитывать при выборе структуры данных. Если вы знаете, что вам не нужно изменять внутреннее состояние, подумайте об использовании неизменяемого объекта, чтобы обеспечить его потокобезопасность и ничто не может перезаписать ваши данные.
Списки
Чтобы представить последовательность элементов, проиндексированных по их целочисленной позиции, вы можете использовать одну из структур данных - список. Списки содержат ноль или более элементов и могут содержать элементы разных типов (даже объекты!). Это делает списки мощными, поскольку они позволяют создавать глубокие и сложные структуры данных.
Списки изменяемы, что означает, что вы можете гибко добавлять, удалять или изменять элементы. Другая последовательная структура данных - это кортеж; разница между ними в том, что кортежи неизменяемы.
Поскольку списки имеют последовательный элемент: если вы хотите отслеживать только уникальные значения и не заботитесь о порядке, используйте набор Python.
Создавайте списки с помощью []
или list()
. Приведение типов с использованием list()
.
Некоторые примечательные методы и советы
Доступ к элементам списка:
my_list[0]
получает элемент списка по смещению. Как и строки, отрицательные индексы могут использоваться для обратного отсчета от конца. my_list[0] = ‘new item'
изменяет элемент списка по смещению. my_list[0:2]
срезы для извлечения элементов по смещению. В этом примере возвращаются первые 2 элемента my_list
.
Добавить элементы списка:
append()
добавляет элемент в конец списка. extend()
или +=
объединяет один список с другим. insert()
добавляет элемент перед любым смещением .
Удалить элементы списка: remove()
удаляет значение элемента из списка. pop()
удаляет последний (или указанный) элемент, одновременно возвращая значение. del
удаляет элемент по его позиции в списке. del
- это оператор Python, а не метод списка.
join()
возвращает строку элементов объединенного списка. Аргументом для join()
является строка или любая повторяемая последовательность строк. len()
возвращает количество элементов в списке. count()
возвращает количество вхождений указанного значения.
Кортежи
Кортежи также представляют собой упорядоченную структуру данных, как и списки. Однако кортежи неизменяемы; нельзя добавлять, удалять или изменять элементы после создания кортежа. Кортежи отличаются от списков тем, что в них гораздо меньше функций, поскольку они не могут быть изменены после определения. Кортежи содержат ноль или более элементов и могут содержать элементы разных неизменяемых типов.
Преимущества кортежей над списками:
- Кортежи занимают меньше места
- Неизменяемость предотвращает ошибочное изменение элементов кортежа
- Кортежи можно использовать как ключи словаря
- Аргументы функции передаются в виде кортежей
Создавайте кортежи, используя ()
или список элементов, разделенных запятыми, без окружающих скобок или фигурных скобок. Приведение типов с использованием tuple()
.
Некоторые примечательные методы и советы
count()
возвращает количество раз, когда элемент был найден в кортеже. index()
возвращает позицию индекса элемента
Словари
Вместо использования смещения словари используют ключи для связывания с каждым значением. Это означает, что порядок не отслеживается и не имеет значения, планируете ли вы использовать словарь. Ключи словаря неизменяемы и уникальны, однако словари изменяемы; элементы "ключ-значение" можно добавлять, удалять или изменять. Короче говоря, словари очень похожи на хэш-карты.
Создавайте словари с помощью {}
. Приведение типов с использованием dict()
.
Некоторые примечательные методы и советы
my_dict[‘key’]
получает элемент по его ключу. my_dict['key'] = ‘value'
использует ключ для добавления (или изменения, если он уже существует) значения. update()
объединяет ключи и значения одного словаря в другой. del
удаляет элемент по предоставленному ключу. del
- это оператор Python, а не словарный метод. keys()
возвращает все ключи словаря. values()
возвращает все значения в словаре. items()
возвращает все пары "ключ-значение" словаря.
Наборы
Набор похож на словарь, в котором есть только ключи, а не значения. Это означает, что наборы уникальны, а не последовательны (хранятся в неупорядоченном виде). Наборы также изменяемы. Наборы содержат ноль или более элементов и могут содержать элементы разных неизменяемых типов.
По сути, наборы используются, когда вы хотите знать, существует ли что-то и ничего больше об этом. Если важно отслеживать порядок значений или хранить несколько одинаковых значений, рассмотрите возможность использования вместо этого кортежа, удобного для использования пробелами.
Создавайте наборы, используя set()
. Приведение типов с использованием set()
.
Некоторые примечательные методы и советы
add()
добавляет элемент в набор, если он еще не существует clear()
удаляет все элементы из набора intersect()
возвращает пересечение двух наборов union()
возвращает объединение двух наборов
В итоге
- Если вам нужно отслеживать последовательность, используйте список или кортеж.
- Если вы хотите отслеживать только уникальные значения и не заботитесь о порядке, используйте набор Python
- Если вам не нужно вносить изменения после определения объекта, используйте кортеж, чтобы сэкономить место и убедиться, что ничто не может перезаписать ваши данные.
- Если вам нужно отслеживать и изменять данные, структурированные парами "ключ-значение", используйте словарь.