常見的數據類型:
- int,整數類型(整形)
- bool,布爾類型
- str,字符串類型
- list,列表類型
- tuple,元組類型
- dict,字典類型,一個容器且元素必須是鍵值對。
- set,集合類型,一個不允許重復重復 & 可變類型(元素可哈希)。
- float,浮點類型(浮點型),常見的小數
本節介紹集合
定義
集合(set)是一個 無序 、可變、不允許數據重復的容器。
集合中的元素不會重復,并且可以進行交集、并集、差集等常見的集合操作。
可以使用大括號?{ }?創建集合,元素之間用逗號?,?分隔, 或者也可以使用?set()?函數創建集合。
v1 = { 11, 22, 33, "alex" }
-
無序,無法通過索引取值。
-
可變,可以添加和刪除元素。
v1 = {11,22,33,44} v1.add(55) print(v1) # {11,22,33,44,55}
-
不允許數據重復。
v1 = {11,22,33,44} v1.add(22) print(v1) # {11,22,33,44}
注意:定義空集合時,只能使用v = set()
,不能使用?v={}
(這樣是定義一個空字典)。
添加元素
data = {"a", 'b', "c"}
data.add("d")
print(data)
還有一個方法,也可以添加元素,且參數可以是列表,元組,字典等,語法格式如下:
s.update( x )
x 可以有多個,用逗號分開。
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.update({1,3})
>>> print(thisset)
{1, 3, 'Google', 'Taobao', 'Runoob'}
>>> thisset.update([1,4],[5,6]) ?
>>> print(thisset)
{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}
>>>
集合的元素只能是 int、bool、str、tuple 。?
刪除、移除元素
移除集合中的元素,且如果元素不存在,不會發生錯誤
data = {"a", 'b', "c"}
data.discard("a")
print(data)
還可以使用remove( x )
將元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤。
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Google', 'Runoob'}
>>> thisset.remove("Facebook") ? # 不存在會發生錯誤
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: 'Facebook'
>>>
我們也可以設置隨機刪除集合中的一個元素,語法格式如下:
s.pop()
thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
x = thisset.pop()print(x)
多次執行測試結果都不一樣。
set 集合的 pop 方法會對集合進行無序的排列,然后將這個無序排列集合的左面第一個元素進行刪除。
長度
v = {"劉能", "趙四", "尼古拉斯"} data = len(v) print(data)
清空
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()
判斷元素是否在集合中存在
判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> "Runoob" in thisset
True
>>> "Facebook" in thisset
False
>>>
for循環
v = {"劉能", "趙四", "尼古拉斯"} for item in v:print(item)
?交集并(減、&、|)
-
減,計算差集
s1 = {"劉能", "趙四", "???"} s2 = {"劉科?", "馮鄉?", "???"}s3 = s1 - s2 s4 = s2 - s1 print(s3) print(s4)
-
&,計算交集
s1 = {"劉能", "趙四", "???"} s2 = {"劉科?", "馮鄉?", "???"} s3 = s1 & s2 print(s3)
-
|,計算并集
s1 = {"劉能", "趙四", "???"} s2 = {"劉科?", "馮鄉?", "???"} s3 = s1 | s2 print(s3)
轉換
其他類型如果想要轉換為集合類型,可以通過set進行轉換,并且如果數據有重復自動剔除。
提示:int/list/tuple/dict都可以轉換為集合。
v1 = "武沛齊" v2 = set(v1) print(v2) # {"武","沛","齊"}
v1 = [11,22,33,11,3,99,22] v2 = set(v1) print(v2) # {11,22,33,3,99}
v1 = (11,22,3,11) v2 = set(v1) print(v2) # {11,22,3}
提示:這其實也是去重的一個手段。
data = {11,22,33,3,99}v1 = list(data) # [11,22,33,3,99]v2 = tuple(data) # (11,22,33,3,99)
元素必須可哈希
因存儲原理,集合的元素必須是可哈希的值,即:內部通過通過哈希函數把值轉換成一個數字
目前可哈希的數據類型:int、bool、str、tuple,而list、set是不可哈希的。
對比和嵌套
類型 | 是否可變 | 是否有序 | 元素要求 | 是否可哈希 | 轉換 | 定義空 |
---|---|---|---|---|---|---|
list | 是 | 是 | 無 | 否 | list(其他) | v=[]或v=list() |
tuple | 否 | 是 | 無 | 是 | tuple(其他) | v=()或v=tuple() |
set | 是 | 否 | 可哈希 | 否 | set(其他) | v=set() |
data_list = ["alex",11,(11, 22, 33, {"alex", "eric"}, 22),[11, 22, 33, 22],{11, 22, (True, ["中國", "北京"], "沙河"), 33} ]
注意:由于True和False本質上存儲的是 1 和 0 ,而集合又不允許重復,所以在整數 0、1和False、True出現在集合中會有如下現象:
v1 = {True, 1} print(v1) # {True}v2 = {1, True} print(v2) # {1}v3 = {0, False} print(v3) # {0}v4 = {False, 0} print(v4) # {False}
集合內置方法完整列表
方法?? ?描述
add()?? ?為集合添加元素
clear()?? ?移除集合中的所有元素
copy()?? ?拷貝一個集合
difference()?? ?返回多個集合的差集
difference_update()?? ?移除集合中的元素,該元素在指定的集合也存在。
discard()?? ?刪除集合中指定的元素
intersection()?? ?返回集合的交集
intersection_update()?? ?返回集合的交集。
isdisjoint()?? ?判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。
issubset()?? ?判斷指定集合是否為該方法參數集合的子集。
issuperset()?? ?判斷該方法的參數集合是否為指定集合的子集
pop()?? ?隨機移除元素
remove()?? ?移除指定元素
symmetric_difference()?? ?返回兩個集合中不重復的元素集合。
symmetric_difference_update()?? ?移除當前集合中在另外一個指定集合相同的元素,并將另外一個指定集合中不同的元素插入到當前集合中。
union()?? ?返回兩個集合的并集
update()?? ?給集合添加元素
len()?? ?計算集合元素個數