Множества (set) в Python с практическими примерами
В этом уроке вы узнаете о типе Set в Python и о том, как его эффективно использовать.
- Что такое тип Set в Python?
- Получение размеров множества
- Проверка наличия элемента
- Добавление элементов в set
- Удаление элемента из множества
- Возврат элемента
- Удаление всех элементов
- Frozenset
- Перебор элементов множества
Что такое тип Set в Python?
Множество (set) в Python — это неупорядоченный список неизменяемых элементов.
Это значит, что:
- элементы множества не упорядочены;
- его элементы уникальны, множество не допускает дублирования элементов;
- они не могут быть изменены. Например, это могут быть числа, строки и кортежи, но не могут быть списками или словарями.
Чтобы определить множество в Python, вы используете фигурные скобки {}. Например:
skills = {'Python programming','Databases', 'Software design'}
Обратите внимание, что словарь также использует фигурные скобки, но его элементы представляют собой пары ключ-значение.
Чтобы определить пустой set, вы не можете использовать фигурные скобки следующим образом:
empty_set = {}
…потому что он определяет пустой словарь.
Поэтому вам нужно использовать встроенную функцию set():
empty_set = set()
Пустой set оценивается как False в логическом контексте. Например:
skills = set() if not skills: print('Empty sets are falsy')
Выход:
Empty sets are falsy
Фактически, вы можете передать итерацию в функцию set(), чтобы создать набор. Например, вы можете передать список, который является итерируемым, в функцию set() следующим образом:
skills = set(['Problem solving','Critical Thinking']) print(skills)
Выход:
{'Critical Thinking', 'Problem solving'}
Обратите внимание, что исходный порядок элементов может не сохраниться.
Если в итерации есть повторяющиеся элементы, функция set() удалит их. Например:
characters = set('letter') print(characters)
Выход:
{'r', 'l', 't', 'e'}
В этом примере строка «letter» содержит два символа e и t, и функция set() удаляет каждый из них.
Получение размеров множества
Чтобы получить количество элементов в множестве, вы используете встроенную функцию len().
len(set)
Например:
ratings = {1, 2, 3, 4, 5} size = len(ratings) print(size)
Выход:
5
Проверка наличия элемента
Чтобы проверить, содержит ли множество элемент, вы используете оператор in:
element in set
Оператор in возвращает True, если множество содержит элемент. В противном случае он возвращает False. Например:
ratings = {1, 2, 3, 4, 5} rating = 1 if rating in ratings: print(f'The set contains {rating}')
Выход:
The set contains 1
Чтобы отрицать оператор in, вы используете оператор not. Например:
ratings = {1, 2, 3, 4, 5} rating = 6 if rating not in ratings: print(f'The set does not contain {rating}')
Выход:
The set does not contain 6
Добавление элементов в set
Чтобы добавить элемент в set, вы используете метод add():
set.add(element)
Например:
skills = {'Python programming', 'Software design'} skills.add('Problem solving') print(skills)
Выход:
{'Problem solving', 'Software design', 'Python programming'}
Удаление элемента из множества
Чтобы удалить элемент из множества, вы используете метод Remove():
set.remove(element)
Например:
skills = {'Problem solving', 'Software design', 'Python programming'} skills.remove('Software design') print(skills)
Выход:
{'Problem solving', 'Python programming'}
Если вы удалите элемент, которого нет в наборе, вы получите ошибку(KeyError). Например:
skills = {'Problem solving', 'Software design', 'Python programming'} skills.remove('Java')
Ошибка:
KeyError: 'Java'
Чтобы избежать ошибки, вам следует использовать оператор in, чтобы проверить, находится ли элемент в множестве, прежде чем удалять его:
skills = {'Problem solving', 'Software design', 'Python programming'} if 'Java' in skills: skills.remove('Java')
Для удобства в множестве есть метод cancel(), позволяющий удалить элемент. И это не вызывает ошибки, если элемента нет в списке:
set.discard(element)
Например:
skills = {'Problem solving', 'Software design', 'Python programming'} skills.discard('Java')
Возврат элемента
Чтобы удалить и вернуть элемент из множества, вы используете метод pop().
Поскольку элементы в наборе не имеют определенного порядка, метод pop() удаляет неуказанный элемент.
Если вы выполните следующий код несколько раз, каждый раз он будет показывать другое значение:
skills = {'Problem solving', 'Software design', 'Python programming'} skill = skills.pop() print(skill)
Удаление всех элементов
Чтобы удалить все элементы из множества, вы используете метод clear():
set.clear()
Например:
skills = {'Problem solving', 'Software design', 'Python programming'} skills.clear() print(skills)
Выход:
set()
Frozenset
Чтобы сделать множество неизменяемым, вы используете встроенную функцию Frozenset(). Frozenset() возвращает новый неизменяемый set из существующего. Например:
skills = {'Problem solving', 'Software design', 'Python programming'} skills = frozenset(skills)
После этого, если вы попытаетесь изменить элементы set, вы получите сообщение об ошибке:
skills.add('Django')
Ошибка:
AttributeError: 'frozenset' object has no attribute 'add'
Перебор элементов множества
Поскольку set является итерируемым, вы можете использовать цикл for для перебора его элементов. Например:
skills = {'Problem solving', 'Software design', 'Python programming'} for skill in skills: print(skill)
Выход:
Software design Python programming Problem solving
Чтобы получить доступ к индексу текущего элемента внутри цикла, вы можете использовать встроенную функцию enumerate():
skills = {'Problem solving', 'Software design', 'Python programming'} for index, skill in enumerate(skills): print(f"{index}.{skill}")
Выход:
0.Software design 1.Python programming 2.Problem solving
По умолчанию индекс начинается с нуля. Чтобы изменить это, вы передаете начальное значение второму аргументу функции enumerate(). Например:
skills = {'Problem solving', 'Software design', 'Python programming'} for index, skill in enumerate(skills, 1): print(f"{index}.{skill}")
Выход:
1.Python programming 2.Problem solving 3.Software design
Обратите внимание, что каждый раз, когда вы запускаете код, вы получаете элементы множества в другом порядке.