# encoding: utf-8# 集合# 無序的,不可隨機訪問的,不可重複的元素集合# 可變集合與不可變集合的混合運算,結果和運算子左邊的相符# 定義:可變集合print({1, 2, 3})print(set("helloword"))print(set([1, 2, 3]))print(set((1, 2, 3)))# 集合推導式print(set(x ** 2 for x in range(10)))# 可變集合的定義s = frozenset("hello")s = frozenset([1, 2, 3])s = frozenset((1, 2, 3))# 只是根據字典中的key產生的集合s = frozenset({"name": "admin", "age": 18})print(s, type(s))# 可變集合推導式s = frozenset(x ** 2 for x in range(1, 10) if x % 2 == 0)print(s, type(s))# 建立空集合時,使用 set() 或者 frozenset()s = set()print(s, type(s))s = frozenset()print(s, type(s))# 集合元素為可雜湊值,即不可變類型# 數值,布爾,字串,元組s = {1, True, "hello", (1, 2, 3)}print(s, type(s))# 集合中的元素不能重複,如果重複就合并為一個l = list(set([1, 2, 3, 1]))print(l, type(l))# 常用操作# 增s = {1, 2, 3, 4}s.add(5)print(s)# 刪# remove()# 如果沒有該元素,則報錯s = {1, 2, 3, 4}s.remove(3)print(s)# discared()# 如果沒有該元素,不會報錯s = {1, 2, 3, 4}s.discard(3)print(s)# pop()# 隨機刪除並返回集合中的一個元素# 如果沒有元素刪除則會報錯s = {1, 2, 3, 4}result = s.pop()print(result, s)# clear()# 清空該集合s = {1, 2, 3, 4}s.clear()print(s)# dels = {1, 2, 3, 4}del s# 遍曆# for in 遍曆s = {1, 2, 3, 4}for v in s: print(v)# 迭代器遍曆s = {1, 2, 3, 4}its = iter(s)# print(next(its))# print(next(its))for v in its: print(v)# 集合之間的操作# intersection 交 &s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}result = s1.intersection(s2)print(result, type(result))# 可變集合與不可變集合進行交集,結果的類型為intersection左邊的類型s1 = frozenset([1, 2, 3, 4])s2 = {3, 4, 5, 6}result = s1.intersection(s2)print(result, type(result))# intersection_update 交 結果賦值更新給原集合# 所以只能用於可變集合s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}s1.intersection_update(s2)print(s1, type(s1))# intersection(iterable)print({"1", "2"}.intersection({"1": 89, "3": 90}))# union 並 |s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}result = s1.union(s2)print(result, type(result))# 可變集合與不可變集合進行並集,結果的類型為union左邊的類型s1 = frozenset([1, 2, 3, 4])s2 = {3, 4, 5, 6}result = s1.union(s2)print(result, type(result))# update 並 結果賦值更新給原集合# 所以只能用於可變集合s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}s1.update(s2)print(s1, type(s1))# update(iterable)print({"1", "2"}.union({"1": 89, "3": 90}))# difference 差 -s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}result = s1.difference(s2)print(result, type(result))# 可變集合與不可變集合進行並集,結果的類型為union左邊的類型s1 = frozenset([1, 2, 3, 4])s2 = {3, 4, 5, 6}result = s1.difference(s2)print(result, type(result))# update 並 結果賦值更新給原集合# 所以只能用於可變集合s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}s1.difference_update(s2)print(s1, type(s1))# update(iterable)print({"1", "2"}.difference({"1": 89, "3": 90}))# 判定# isdisjoint()# 是否不相交s1 = {1, 2, 3, 4}s2 = {3, 4, 5, 6}print(s1.isdisjoint(s2))# issuperset()# 是否包含另一個集合s1 = {1, 2, 3, 4}s2 = {3, 4}print(s1.issuperset(s2))# issubset()# 是否包含於另一個集合print(s2.issubset(s1))