{} 集合是一種無序不可重復的序列;集合常用于對兩個串列的交并差處理;
集合沒有任何獲取元素的方法,只用作處理串列或元組的臨時資料型別,不適合資料的存盤和傳輸,
1.集合的創建
??利用內置函式set() 或 { }創建;
set_test = set() # 創建空集合
print(set_test) # set()
print(type(set_test)) # <class 'set'>
set_test2 = {}
print(set_test2) # {}
print(type(set_test2)) # <class 'dict'>
set_test3 = {'python', True, 23}
print(set_test3) # {True, 23, 'python'}
# 用{ }創建集合物件時,集合內元素必須是不可變資料型別
# set_test4 = {[34, 56], [78, 90]} # TypeError: unhashable type: 'list'
# print(set_test4)
test_list = [34, 56, 34, 90]
set_test5 = set(test_list)
print(set_test5) # {56, 34, 90} set()方法可以包裹串列,且可幫助串列去重
print(list(set_test5)) # [56, 34, 90] (此時可能想再轉回串列,利用串列內置函式list()即可)
# 字典同理
# set_test = {{'name': 'll'}} # TypeError: unhashable type: 'dict'
# print(set_test)
dict_set = set({'name': 'll'}) # {'name'} 留下的是key值
print(dict_set)
2.集合增加元素的操作
??可以利用set.add(元素) 一次增加一個元素;
??利用set.update(可迭代物件) 一次增加多個元素;已經存在的元素不會重復添加;
test_set = {78, 'python', False}
test_set.add(45)
print(test_set) # {'python', False, 45, 78}
test_set.update(['go', 67])
print(test_set) # {False, 'go', 67, 45, 78, 'python'}
??
3.集合中洗掉元素的操作
??set.remove(元素) 洗掉指定元素;
??set.clear() 清空集合中元素;
??利用python內置函式del ;
test_set = {78, 'python', False}
test_set.remove(78)
print(test_set) # {'python', False}
# test_set.remove('py') # KeyError: 'py' (元素不存在時會報錯)
test_set.clear() # set()
print(test_set)
del test_set
print(test_set) # NameError: name 'test_set' is not defined
4.集合的差集
??a, b兩個集合,屬于a且不屬于b的元素集,就是a與b的差集;
??利用difference函式,a.difference(b)可以獲取結果; 或直接a - b;
??a.difference_update(b) 將差集結果賦值給a、此時b不變;
a = {34, 'python', True}
b = {34, 89}
print(a.difference(b)) # {True, 'python'}
print(a - b) # {True, 'python'}
print(a) # {True, 34, 'python'}
print(id(a)) # 140678808395104
a.difference_update(b)
print(a) # {True, 'python'}
print(id(a)) # 140678808395104 (a原有的集合物件被修改了)
print(b) # {89, 34} (集合b未被修改)
5.集合的交集
??a,b集合中共有的元素集;
??a.intersection(b, c...) 可以多個集合一起取交集;
??利用&符號, a & b & c;
??a.intersection_update(b, c...) 將交集結果更新到a集合;
a = {34, 'python', True}
b = {34, 89}
c = {'go', 34}
print(a & b & c) # {34}
print(list(a & b & c)[0]) # 34 (可以將集合先轉化為串列,就可以通過索引訪問元素了)
print(a.intersection(b, c)) # {34}
a.intersection_update(b, c)
print(a) # {34}
print(b) # {89, 34}
print(c) # {'go', 34}
6.集合的并集
??幾個集合中所有元素組成的集合;
??a.union(b, c ...) ;
??a | b | c ;
??a.union_update(b, c ...) ;
a = {34, 'python', True}
b = {34, 89}
c = {'go', 34}
print(a | b | c) # {True, 34, 'go', 89, 'python'}
print(a.union(b, c)) # {True, 34, 'python', 'go', 89}
# 傳入的引數可以是可迭代物件
print(a.union([34, 999])) # {'python', 34, True, 999}
# 差集和交集引數同樣可以是可迭代物件
print(a.difference((34,))) # {True, 'python'}
print(a.intersection('rtrt')) # set()
7.集合的一些回傳值是bool型的函式
??a.isdisjoint(b) 判斷兩集合是否沒有相同元素;
??a.issubset(b) 判斷一個集合a是否是集合b 的子集;
??與子集相對,b.issuperset(a) 判斷集合b是否是集合a的超集;
a = {34, 'python', True}
b = {34, 89}
print(a.isdisjoint(b)) # False
print(b.isdisjoint({'go'})) # True
print(b.issubset({34, 89, 90})) # True
print({34, 89, 90}.issuperset(b)) # True
a = {34, 56, 78}
print(a.isdisjoint([56])) # False
8.對稱差集
??只在a和只在b中的元素集合;
??a.symmetric_difference(b)、a.symmetric_difference_update(b)、a ^ b
a = {34, 'python', True}
b = {34, 89}
print(a ^ b) # {'python', 89, True}
print(a.symmetric_difference(b)) # {'python', 89, True}
a.symmetric_difference_update(b)
print(a) # {89, True, 'python'}
print(b) # {89, 34}
??
9.簡單函式在集合的使用
??in 、not in 成員判斷;
??len(set) 集合長度;
a = {34, 'python', True}
b = {34, 89}
print(34 in a) # True
print(len(b)) # 2
10.frozenset() 創建不可變集合
??不可變集合之于集合,相當于元組之于串列
?? 因為{ }創建集合時,存盤的物件必須是不可變型別元素,所以想存盤另一個集合時,就不可以了,frozenset就解決了這個問題;
??frozenset還可以作為字典的key、且存在哈希值;
# frozenset(可迭代物件)
# 可以傳集合
a = frozenset({34, 56})
print(a) # frozenset({56, 34})
# 可以傳串列
b = frozenset([3, 4])
print(b) # frozenset({3, 4})
# 可以傳元組
c = frozenset((454,))
print(c) # frozenset({454})
# { }創建集合時,集合中不能存盤集合
# d = {{34}} # TypeError: unhashable type: 'set'
# 可以存盤不可變集合
d = {frozenset([454])}
print(d) # {frozenset({454})}
a = frozenset({34, 56})
print(a) # frozenset({56, 34})
a.add(45) # AttributeError: 'frozenset' object has no attribute 'add'
# frozenset就不存在更改操作相關的方法了
e = frozenset('eee')
print(e) # frozenset({'e'})
總結
??
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518829.html
標籤:Python
上一篇:js php 簡單聊天室
