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