Списки, кортежи, наборы, словари ... Какую встроенную структуру данных вы используете?

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
  • Если вам не нужно вносить изменения после определения объекта, используйте кортеж, чтобы сэкономить место и убедиться, что ничто не может перезаписать ваши данные.
  • Если вам нужно отслеживать и изменять данные, структурированные парами "ключ-значение", используйте словарь.