MyTetra Share
Делитесь знаниями!
Множества / операции над множествами
Время создания: 10.09.2017 20:23
Текстовые метки: knowledge
Раздел: Python - Types data - set - операции над множествами
Запись: xintrea/mytetra_db_mcold/master/base/1505064199trr285ys02/text.html на raw.githubusercontent.com

Множества

Последнее обновление: 21.06.2017

  •  
  •  
  •  
  •  

Множество (set) представляют еще один вид набора элементов. Для определения множества используются фигурные скобки, в которых перечисляются элементы:


1
2
users = {"Tom","Bob","Alice", "Tom"}
print(users)    # {"Tom","Bob","Alice"}

Обратите внимание, что несмотря на то, что функция print вывела один раз элемент "Tom", хотя в определении множества этот элемент содержится два раза. Все потому что множество содержит только уникальные значения.

Также для определения множества может применяться функция set(), в которую передается список или кортеж элементов:


1
users3 = set(["Mike", "Bill", "Ted"])

Функцию set удобно применять для создания пустого множества:


1
users = set()

Для получения длины множества применяется встроенная функция len():


1
2
users = {"Tom","Bob","Alice"}
print(len(users)}   # 3

Добавление элементов

Для добавления одиночного элемента вызывается метод add():


1
2
3
users = set()
users.add("Sam")
print(users)

Удаление элементов

Для удаления одного элемента вызывается метод remove(), в который передается удаляемый элемент. Но следует учитывать, что если такого элемента не окажется в множестве, то будет сгенерирована ошибка. Поэтому перед удалением следует проверять на наличие элемента с помощью оператора in:


1
2
3
4
5
6
users = {"Tom", "Bob", "Alice"}
 
user = "Tom"
if user in users: 
    users.remove(user)
print(users)    # {"Bob", "Alice"}

Также для удаления можно использовать метод discard(), который не будет генерировать исключения при отсутствии элемента:


1
2
user = "Tim"
users.discard(user)

Для удаления всех элементов вызывается метод clear():


1
users.clear()

Перебор множества

Для перебора элементов можно использовать цикл for:


1
2
3
4
users = {"Tom","Bob","Alice"}
 
for user in users:
    print(user)

При переборе каждый элемент помещается в переменную user.

Операции с множествами

С помощью метода copy() можно скопировать содержимое одного множества в другую переменную:


1
2
users = {"Tom","Bob","Alice"}
users3 = users.copy()

Метод union() объединяет два множества и возвращает новое множество:


1
2
3
4
5
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
 
users3 = users.union(users2)
print(users3)   # {"Bob", "Alice", "Sam", "Kate", "Tom"}

Пересечение множеств позволяет получить только те элементы, которые есть одновременно в обоих множествах. Метод intersection() производит операцию пересечения множеств и возвращает новое множество:


1
2
3
4
5
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
 
users3 = users.intersection(users2)
print(users3)   # {"Bob"}

Вместо метода intersection мы могли бы использовать операцию логического умножения:


1
2
3
4
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
 
print(users & users2)   # {"Bob"}

В этом случае мы получили бы тот же результат.

Еще одна операция - разность множеств возвращает те элементы, которые есть в первом множестве, но отсутствуют во втором. Для получения разности множеств можно использовать метод difference или операцию вычитания:


1
2
3
4
5
6
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
 
users3 = users.difference(users2)
print(users3)           # {"Tom", "Alice"}
print(users - users2)   # {"Tom", "Alice"}

Отношения между множествами

Метод issubset позволяет выяснить, является ли текущее множество подмножеством (то есть частью) другого множества:


1
2
3
4
5
users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
 
print(users.issubset(superusers))   # True
print(superusers.issubset(users))   # False

Метод issuperset, наоборот, возвращает True, если текущее множество является надмножеством (то есть содержит) для другого множества:


1
2
3
4
5
users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
 
print(users.issuperset(superusers))   # False
print(superusers.issuperset(users))   # True

frozen set

Тип frozen set является видом множеств, которое не может быть изменено. Для его создания используется функцияfrozenset:


1
users = frozenset({"Tom", "Bob", "Alice"})

В функцию frozenset передается набор элементов - список, кортеж, другое множество.

В такое множество мы не можем добавить новые элементы, как и удалить из него уже имеющиеся. Собственно поэтому frozen set поддерживает ограниченный набор операций:

  • len(s): возвращает длину множества
  • x in s: возвращает True, если элемент x присутствует в множестве s
  • x not in s: возвращает True, если элемент x отсутствует в множестве s
  • s.issubset(t): возвращает True, если t содержит множество s
  • s.issuperset(t): возвращает True, если t содержится в множестве s
  • s.union(t)
  • : возвращает объединение множеств s и t

  • s.intersection(t): возвращает пересечение множеств s и t
  • s.difference(t): возвращает разность множеств s и t
  • s.copy(): возвращает копию множества s
 
MyTetra Share v.0.58
Яндекс индекс цитирования