Всем привет!
В этой статье поговорим о том, какие ещё есть структуры данных в Python.
Две таких структуры данных мы уже разбирали это списки и словари.
Кроме них есть ещё такие структуры данных как: кортежи (tuple) и множество (set).
Начнём с множества (set).
Set - это набор уникальных элементов, то есть в set никогда не будет повторяющихся элементов.
Множество записывается в фигурные скобки {}
set = {...}
Множество работает быстрее списков, поэтому его чаще всего применяют для работы с большими наборами данных.
Давайте на практике поработаем с множеством.
Листинг 1
# Напишем set где у нас будут задублированные значение
# И увидим, что в set будут только уникальные значения
dataset = {"Java", "Python", "Go", "Python", "C", "Go"}
# Выведем размер set
print(f"Len: {len(dataset)}")
Вывод: Len: 4
# Выведем содержимое set
print(f"Data: {dataset}")
Вывод: Data: {'C', 'Python', 'Java', 'Go'}
Как видно на примере в множество мы добавили 6 элементов, но при выводе в консоль информации по размеру множества и его содержимого мы увидимо всего 4 элемента. Это подтверждает то, что в множестве будут храниться только уникальные элементы.
Множество не упорядочены поэтому у них отсутствуют индексы.
Множество можно использовать как унифицирование списка.
Листинг 2
# Реализуем список
data_list = ["Java", "Python", "Go", "Python", "C", "Go"]
# Выведем размер списка
print(f"Len list: {len(data_list)}")
# Выведем содержимое списка
print(f"Data list: {data_list}")
# Конвертируем список в множество
data_set = set(data_list)
# Выведем размер множества
print(f"Len set: {len(data_set)}")
# Выведем содержимое множества
print(f"Data set: {data_set}")
Вывод:
Len list: 6
Data list: ['Java', 'Python', 'Go', 'Python', 'C', 'Go']
Len set: 4
Data set: {'C', 'Java', 'Python', 'Go'}
Есть один неприятный сюрприз. Если в метод set передать строку, то он сделает из неё множество, а если передать несколько строк через запятую, то мы получим ошибку.
Листинг 3
data_set = set("java", "python")
TypeError: set expected at most 1 argument, got 2
Во всем остальном set похож на списки и имеет такие же методы:
- add(element) - добавит новый элемент и не факт что в конец списка
- pop - удаляет первый элемент из set
- discard(element) - удаляет переданный в метод элемент, если он есть в set
- remove(element) - удаляет переданный в метод элемент, но если такой элемент будет не найден, то будет ошибка KeyError
Специфические методы set:
- union(set) - соединяет множество
- intersection(set) - пересечения множеств, то есть Python сформирует множество из пресекающихся элементов
- difference(set) - удаляет из set пересекающиеся элементы
- issubset(set) - возвращает true, если один set является подмножеством другого set
Листинг 4
data_set1 = {"Python", "C", "CSS", "Java", "Go", "HTML"}
data_set2 = {"HTML", "CSS", "JavaScript"}
# union
print(f"Union: {data_set1.union(data_set2)}")
Вывод: Union: {'JavaScript', 'Python', 'CSS', 'Go', 'Java', 'C', 'HTML'}
# intersection
print(f"Intersection: {data_set1.intersection(data_set2)}")
Вывод: Intersection: {'CSS', 'HTML'}
# difference
print(f"Difference: {data_set1.difference(data_set2)}")
Вывод: Difference: {'Python', 'C', 'Go', 'Java'}
# issubset
print(f"Issubset: {data_set2.issubset(data_set1)}")
Вывод: Issubset: False
# Если добавим в data_set1 JavaScript, то получим true
data_set1.add("JavaScript")
print(f"data_set1: {data_set1}")
print(f"Issubset: {data_set2.issubset(data_set1)}")
Вывод: data_set1: {'Go', 'Java', 'JavaScript', 'Python', 'CSS', 'C', 'HTML'}
Issubset: True
В следующей статье мы разберём кортежи и будет побольше примеров.
Если понравилась статья, то подписывайся, ставь лайк и комментируй.
Другие статьи канала: