Найти тему

Python. Структуры данных. Часть 7

Всем привет!

В этой статье поговорим о том, какие ещё есть структуры данных в 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

В следующей статье мы разберём кортежи и будет побольше примеров.

Если понравилась статья, то подписывайся, ставь лайк и комментируй.

Другие статьи канала:

Рубрика по "просьбе подписчика". Работа с XML файлом.
Изучаю языки програмирования21 марта 2023
Изучаю языка программирования Python. Основы синтаксиса. Работа с файлом. Часть 6.1
Изучаю языки програмирования21 марта 2023
Изучаю язык программирования Python. Основы синтаксиса. Работа с файлом. Часть 6
Изучаю языки програмирования20 марта 2023