Множества (set) в Python с практическими примерами

В этом уроке вы узнаете о типе Set в Python и о том, как его эффективно использовать.

Содержание

Что такое тип 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

Обратите внимание, что каждый раз, когда вы запускаете код, вы получаете элементы множества в другом порядке.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *