Найти в Дзене

Шпаргалка по структурам данных в Python

Давайте вместе вспомним структуры данных в Python. Ну и эту шпаргалку можно использовать для подготовки к собеседованиям. Подписывайтесь на мой канал в Телеграмм, чтобы ничего не пропустить. Структура данных — это способ организации, хранения и управления данными в компьютерной памяти или на внешних носителях таким образом, чтобы с ними было удобно работать с точки зрения выполнения различных операций (например, добавления, удаления, поиска, сортировки и т.д.). Структуры данных играют ключевую роль в разработке эффективных алгоритмов и программ, так как выбор правильной структуры данных может существенно повлиять на производительность и эффективность решения. Читайте также: Динамическая структура данных, которая позволяет хранить элементы различных типов. Элементы хранятся последовательно и индексируются с 0. my_list = [1, 2, 3, 4, 5] element = my_list[2] # Получение третьего элемента (индексация с 0) my_list.remove(3) # Удаление элемента по значению (3) del my_list[1] # Удалени
Оглавление

Давайте вместе вспомним структуры данных в Python. Ну и эту шпаргалку можно использовать для подготовки к собеседованиям.

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

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

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

Читайте также:

1. List (Список)

Описание:

Динамическая структура данных, которая позволяет хранить элементы различных типов. Элементы хранятся последовательно и индексируются с 0.

Пример инициализации:

my_list = [1, 2, 3, 4, 5]

Получение элемента:

element = my_list[2] # Получение третьего элемента (индексация с 0)

Удаление элемента:

my_list.remove(3) # Удаление элемента по значению (3)
del my_list[1] # Удаление элемента по индексу (второй элемент)

Плюсы:

  • Динамический размер (не нужно заранее указывать размер).
  • Быстрая индексация (O(1)).
  • Простота использования и встроенные методы для работы с элементами.

Минусы:

  • Вставка и удаление элементов в середине списка требуют сдвига (O(n)).
  • Память может быть неэффективно использована (резервирование под возможные элементы).

Используется для:

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

Актуальность:

Очень актуальна в Python благодаря гибкости и множеству встроенных методов.

2. Tuple (Кортеж)

Описание:

Неподвижная (immutable) версия списка. Элементы кортежа нельзя изменять после его создания.

Пример инициализации:

my_tuple = (1, 2, 3, 4)

Получение элемента:

element = my_tuple[1] # Получение второго элемента

Удаление элемента:

# Прямого удаления элемента нет, так как кортеж неизменяем.
# Можно создать новый кортеж без нужного элемента.
new_tuple = my_tuple[:1] + my_tuple[2:]

Плюсы:

  • Быстрая индексация (O(1)).
  • Неизменяемость (immutable) обеспечивает безопасность данных.

Минусы:

  • Нельзя изменять элементы.
  • Для операций нужно создавать новые кортежи.

Используется для:

Хранение неизменяемых наборов данных, когда важна целостность информации.

Актуальность:

Актуальна для случаев, когда требуется неизменяемость данных.

3. Set (Множество)

Описание:

Неупорядоченная коллекция уникальных элементов. Элементы не могут повторяться.

Пример инициализации:

my_set = {1, 2, 3, 4}

Получение элемента:

# Прямого доступа по индексу нет, так как множество неупорядочено.
# Можно проверить наличие элемента:
if 2 in my_set:
print("Элемент найден")

Удаление элемента:

my_set.remove(2) # Удаление элемента по значению

Плюсы:

  • Быстрая проверка наличия элемента (O(1)).
  • Уникальность элементов.
  • Быстрая вставка и удаление (O(1)).

Минусы:

  • Нет индексации и упорядоченности.
  • Иногда требует больше памяти для хранения структуры.

Используется для:

Хранение уникальных элементов, проверка наличия элемента.

Актуальность:

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

4. Dictionary (Словарь)

Описание:

Коллекция пар "ключ-значение". Ключи уникальны и используются для доступа к значениям.

Пример инициализации:

my_dict = {'a': 1, 'b': 2, 'c': 3}

Получение элемента:

value = my_dict['a'] # Получение значения по ключу 'a'

Удаление элемента:

del my_dict['b'] # Удаление элемента по ключу

Плюсы:

  • Быстрая вставка, удаление и доступ по ключу (O(1)).
  • Уникальные ключи.
  • Гибкость в хранении данных различных типов.

Минусы:

  • Неупорядоченность до Python 3.6 (начиная с Python 3.7, порядок вставки сохраняется).
  • Может занимать много памяти из-за хеширования ключей.

Используется для:

Хранение данных в формате "ключ-значение", быстрый доступ по ключу.

Актуальность:

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

5. Deque (Дек)

Описание:

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

Пример инициализации:

from collections import deque
my_deque = deque([1, 2, 3, 4])

Получение элемента:

# Прямого доступа по индексу нет, но можно вручную итерироваться
element = my_deque[1] # Получение второго элемента

Удаление элемента:

my_deque.pop() # Удаление элемента с конца
my_deque.popleft() # Удаление элемента с начала

Плюсы:

  • Быстрые операции добавления и удаления с обоих концов (O(1)).
  • Поддержка FIFO и LIFO режимов.

Минусы:

  • Нет произвольного доступа к элементам по индексу.

Используется для:

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

Актуальность:

Актуальна для задач с очередями и стеками.

6. Heap (Куча)

Описание:

Минимальная или максимальная куча (приоритетная очередь), где доступ к минимальному (или максимальному) элементу осуществляется за O(1), а вставка и удаление за O(log n).

Пример инициализации:

import heapq
my_heap = []
heapq.heappush(my_heap, 3)
heapq.heappush(my_heap, 1)
heapq.heappush(my_heap, 2)

Получение элемента:

min_element = my_heap[0] # Получение минимального элемента

Удаление элемента:

min_element = heapq.heappop(my_heap) # Удаление минимального элемента

Плюсы:

  • Быстрый доступ к минимальному/максимальному элементу (O(1)).
  • Эффективные операции вставки и удаления (O(log n)).

Минусы:

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

Используется для:

Очереди с приоритетом, задачи планирования, сортировка.

Актуальность:

Актуален для задач с приоритетом.

7. String (Строка)

Описание:

Неподвижная (immutable) последовательность символов.

Пример инициализации:

my_string = "Hello, World!"

Получение элемента:

char = my_string[1] # Получение второго символа

Удаление элемента:

# Прямого удаления нет, так как строки неизменяемы
# Можно создать новую строку без нужного символа
new_string = my_string[:1] + my_string[2:]

Плюсы:

  • Неизменяемость обеспечивает безопасность данных.
  • Множество встроенных методов для работы со строками.

Минусы:

  • Для изменения строки нужно создавать новую строку, что может быть неэффективно.

Используется для:

Хранение и обработка текстовых данных.

Актуальность:

Актуальна для работы с текстом.

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

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

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

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам

-2