На этот раз мы не изучаем существующие функции. Вместо этого мы изучим несуществующие функции, которые делают наборы уникальными типами данных в Python!

set можно определить как тип данных для хранения нескольких элементов в одной переменной. Это один из 4 встроенных контейнеров данных:

  • установить
  • кортеж
  • список
  • словарь

Набор создается фигурными скобками {} :

seasons = {"winter", "spring", "summer", "autumn"}

Можно создать с set() . На этот раз вам нужно передать итерируемый объект в set() :

# takes a list
seasons = set(["winter", "spring", "summer", "autumn"])
# takes a tuple
seasons = set(("winter", "spring", "summer", "autumn"))

Но не путайте наборы со словарями. Словари — это наборы данных, состоящие из пар ключ-значение.

my_dictionary = {"season": "summer", "month": "june", "day": 4}

Здесь "season" , "month" и "day" — ключи. Соответственно, "summer" , "june" и 4 являются их значениями.

С помощью функции type() мы можем получить тип любого объекта.

type(seasons)

даст нам:

<class 'set'>

Вспомнив, что такое set в Python, мы можем перейти к их несуществующим функциям.

1- Нет дубликатов

В set нет повторяющихся значений. Давайте поместим еще один "autumn" в конец нашего набора "seasons" и увидим, что внутри него будет только один "autumn":

seasons = {"winter", "spring", "summer", "autumn", "autumn"}
print(seasons)

Результат:

{'summer', 'spring', 'winter', 'autumn'}

Вы заметили это?

2- неупорядоченный

sets хранят свое содержимое неупорядоченным образом. Другими словами, нет никакой гарантии, что sets хранит данные именно так, как вы их определяете. Давайте создадим файл Python с именем set-tutorial.py и поместим в него эти 2 строки:

seasons = {"winter", "spring", "summer", "autumn"}
print(seasons)

Что я хочу сделать, так это запустить этот скрипт пять раз и каждый раз смотреть, что написано на терминале. Для этого напишем в консоли простой цикл for для запуска наших скриптов:

for ((i=1; i<=5; i++))
do
    python set-tutorial.py
done

Результат:

{'autumn', 'summer', 'winter', 'spring'}
{'winter', 'summer', 'spring', 'autumn'}
{'spring', 'winter', 'summer', 'autumn'}
{'spring', 'summer', 'autumn', 'winter'}
{'winter', 'spring', 'autumn', 'summer'}

Как видите, все они отличаются друг от друга, и ни один из них не имеет такого же порядка, как тот, который определен изначально.

3- Без индексации — без ключей

Попробуем получить доступ к первому элементу набора:

seasons = {"winter", "spring", "summer", "autumn"}
print(seasons[0])

Результат:

Traceback (most recent call last):
  File "<string>", line 2, in <module>
TypeError: 'set' object is not subscriptable

Что? Как?

Я знаю, что доступ к элементам set с помощью индексации кажется естественным, но это невозможно. Логика настолько проста, что, поскольку данные хранятся в set в неупорядоченном виде, бессмысленно обращаться к его элементам с помощью индексации. Кроме того, sets не предназначены для хранения пар ключ-значение, поэтому вы не можете использовать ключи для получения элементов.

В случае доступа к элементам существует несколько способов. Например, вы можете использовать цикл for.

seasons = {"winter", "spring", "summer", "autumn"}

for season in seasons:
    print(season)

Результат:

winter
autumn
summer
spring

Или вы можете использовать ключевые слова next и iter:

seasons = {"winter", "spring", "summer", "autumn"}
seasons = iter(seasons)

first_item = next(seasons)
print(first_item)
second_item = next(seasons)
print(second_item)

Результат:

summer
winter

Но должен признать, что называть мои переменные first_item и second_item по-прежнему бессмысленно. Заказа нет!

4- Нет изменяемых элементов

set в Python может содержать только неизменяемые объекты, такие как строки, кортежи, числа с плавающей запятой и т. д. Таким образом, вы не можете поместить список или словарь в набор.

Это хорошо работает:

my_set = {(1, 2,), 64, "hi", 1.023}

Давайте посмотрим, может ли список или словарь быть элементами множества. Не забывайте, что списки и словари — изменяемые объекты.

Во-первых, мы пытаемся поместить {"hello": "world"} в набор.

my_set = {"hi", {"hello": "world"}}

Результат:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: unhashable type: 'dict'

Теперь мы пытаемся создать множество, содержащее список:

my_list = ["hello", "world"]
my_set = {my_list}

Результат:

Traceback (most recent call last):
  File "<string>", line 2, in <module>
TypeError: unhashable type: 'list'

Заключение

Как и его элементы, наборы являются уникальными типами данных в Python. Они неупорядочены, не допускают неизменяемых объектов и повторяющихся элементов внутри себя. И не пытайтесь получить доступ к их элементам с помощью индексации!

Надеюсь, вам понравится и вы узнаете много нового!

Спасибо, что прочитали мою статью. Хочешь посмотреть еще один хороший?



Не используйте «или для проверки нескольких условий в Python
Есть более сложное решение!betterprogramming.pub»