На этот раз мы не изучаем существующие функции. Вместо этого мы изучим несуществующие функции, которые делают наборы уникальными типами данных в 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»