# 集合:用來存儲一個無序的不重複的元素序列
# 集合的標識也是大括號{},中間的元素使用逗號","隔開
# 集合的創建方式:
# set(序列)
# s = {"123","qwe"}
# 創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典
# s = {},這種是創建空的字典
# 集合的兩大功能:
# 集合可以實現去重的功能
# 集合可以實現關係測試:交集;差集;併集;是否子集;是否沒有交集
se = {"value","value1","value2"}
print(se)
print(type(se))
# 創建集合
a = {11,22,33,"aa","bb"}
print(a)
print(type(a))
a = set("12345a7b9")
print(a)
print(type(a))
# 創建一個空的集合
# a = {}
# print(type(a)) 這種是創建空的字典
# 這才是創建空的集合
a = set()
print(a)
print(type(a))

# 集合輸出會自動去重
a = set("112233456")
print(a)
# 集合輸出順序是無序的,無序即代表輸出的元素每次順序都不一樣,隨機的
a = {122,"ttt",765}
print(a)
print(type(a))

# 集合是無序的,不重複的數據類型,因此不支持索引,切片,重複和連接;並沒有像其它數據容器一樣直接提供元素操作,元素操作都是通過函數實現的
# 集合間的運算操作:
# - 差集
# | 併集
# & 交集
# ^ 返回兩個集合中不同時存在的元素
# 差集 -,哪個在前面就以哪個為基準,將前邊集合中包含後邊集合的元素減掉
a1 = {"12","34","56"}
a2 = {"78","12"}
a3 = a1 - a2
print(a3)
a4 = a2 - a1
print(a4)
# 併集 | 將兩個集合合併起來,自動去重
a3 = a1 | a2
print(a3)
# 交集 & 輸出兩個集合中都有的元素
a3 = a1 & a2
print(a3)
# ^ 輸出兩個集合中不同時存在的元素
b1 = a1 ^ a2
print(b1)

# 集合常用操作方法
# add 添加元素
# remove 移除指定元素
# pop 隨機移除元素
# clear 清除所有元素
# union 返回兩個集合的併集
# difference 返回兩個集合的差集
# intersection 返回兩個集合的交集
# symmetric_difference 返回兩個集合中不重複元素的集合
# symmetric_difference_update 移除相同元素,添加不同元素
# update 可使用其他數據類型添加元素
# 添加一個元素,集合添加進來的元素不會自己刪除
a5 = {"123","234"}
a5.add("333")
print(a5)
# 移除一個元素,移除的元素需要是在集合中存在的元素,不存在的會報錯
a5.remove("333")
print(a5)

# a5.remove("432")
# print(a5)

# 隨機移除元素
print(a5.pop())
print(a5.pop())
# 清除所有元素
a5.clear()
print(a5)

# 兩個集合併集
a6 = {"11","22","33"}
a7 = {"44","55","33"}
a8 = a6.union(a7)
print(a8)
# 兩個集合差集,哪個在前面就以哪個為基準
a9 = a6.difference(a7)
print(a9)
a9 = a7.difference(a6)
print(a9)
# 兩個集合交集
a9 = a6.intersection(a7)
print(a9)
# 返回兩個集合中不重複元素
a9 = a6.symmetric_difference(a7)
print(a9)

# symmetric_difference_update()方法:移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中
a6.symmetric_difference_update(a7)
print(a6)

# update()方法:給集合添加(更新)元素
#使用字典更新
dic = {"name": "Tom", "age": 18, "area": "siming" }
a6.update(dic)
print(a6)
#使用元組更新
tup = (1, 2,3)
a6.update(tup)
print(a6)
#使用列表更新
lis = ["aa", "bb", 123]
a6.update(lis)
print(a6)
#使用集合更新,相當於併集
a6.update(a7)
print(a6)

# 集合可以用 in 與 not in 測試成員是否在集合中
if 11 in a:
print("11在集合a中")
else:
print("11不在集合a中")

