Давайте вместе вспомним структуры данных в 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 - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам