集合
前言:首先我問大家幾個問題,什麼是集合?集合的作用是什麼?集合是可變的數據類型嗎?下面我們就按照這些問題進行展開。
- 什麼是集合?
由不同元素組成的集合,集合是一組無序排列 可hash值,可作爲字典的key。集合的目的是將不同的值存放在一起,不同的集合間用來做關係運算。
- 集合的作用
我認爲集合有兩個作用,一個是集合本身的性質 ‘’去重‘’,另一個集合可以用來做關係測試,比如交集,並集,差集,反交集(個人叫法)
- 集合是可變數據類型嗎?
set1 = {1, 2, 3}
print(id(set1))
set1.add(4)
print(id(set1))
# 輸出:
166444888576
166444888576
a) 由此可見集合是可變數據類型,但是在這裏我要強調一下,上面我說了集合是一組無序排列 可hash值,所以說,集合裏面的元素必須都是不可變的數據類型,而且集合也是無序的,所以說沒有索引的概念
b) 將列表作爲集合的元素
set1 = {[1, 2], 3, 4}
print(set1)
# 報錯:
TypeError: unhashable type: 'list'
集合的方法
-
集合的創建
a) 直接用花括號括起來
set1 = {1, 2, 3, 3, 2} print(set1) # 輸出: {1, 2, 3}
可見集合會自動去除重複的元素
b) 內置方法進行創建
set1 = set((1, 2, 3, 3, 2)) print(set1) # 輸出 {1, 2, 3}
c) 創建空集合
set1 = {} # 這樣創建是默認創建的空字典而不是空集合 set2 = set() print(type(set1)) print(type(set2)) # 輸出: <class 'dict'> <class 'set'>
-
增
a) add() 單獨增加
set1 = {1, 2, 3} set1.add(4) print(set1) # 輸出: {1, 2, 3, 4}
b) update() 迭代增加,與列表的extend類似
set1 = {1, 2, 3} set1.update([4, 5, 6]) print(set1) # 輸入: {1, 2, 3, 4, 5, 6}
-
刪
a) remove() 刪除指定元素
set1 = {1, 2, '小紅'} set1.remove('小紅') print(set1) # 輸出: {1, 2}
b) pop() 隨機刪除一個元素
set1 = {'李明', '小蘭', '小紅'} set1.pop() print(set1) # 輸出: 多種結果
-
改,查
因爲集合是無序的,所以不提供改和查的功能,但還是有隔山打牛的方式進行更改a) 改 我們先刪除要改的元素,然後進行添加元素
set1 = {'李明', '小蘭', '小紅'} set1.remove('小紅') set1.add('李華') print(set1) # 輸出: {'小蘭', '李華', '李明'}
b) 查 通過 in 或者 not in 判斷元素是否在集合內
set1 = {'李明', '小蘭', '小紅'} print('李明' in set1) print('憨憨' in set1) # 輸出: True False
重點
前面說了集合的幾個作用:
- 去重
- 做關係測試
-
去重,當我們要對列表進行去重時,我們可以將列表轉爲集合再轉爲列表,即可完成去重工作
set1 = [1, 2, '你好', 2, 7, '你好'] set1 = set(set1) print(set1) print(list(set1)) # 輸出: {1, 2, '你好', 7} [1, 2, '你好', 7]
-
關係測試
a) 交集 & 兩個集合共有的元素
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} # 兩種去交集的方式 print(set1 & set2) print(set1.intersection(set2)) # 輸出: {3, 4} {3, 4}
b) 並集 |
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set1 | set2) # 輸出: {1, 2, 3, 4, 5, 6}
c) 差集
set1 - set2:set1 減去與set2的共有元素,再得到set1的結果
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set1 - set2) # 輸出: {1, 2}
set2 - set1:set2 減去與set1 的共有元素,再得到set2的結果
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set2 - set1) # 輸出: {5, 6}
d) 反交集(個人叫法) ^
可以理解爲並集減去交集得到的結果set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set2 ^ set1) print((set1 | set2) - (set1 & set2)) # 輸出: {1, 2, 5, 6} {1, 2, 5, 6}
-
判斷子集與超集
a) 判斷子集超集
set1 = {1, 2, 3, 4, 5} set2 = {3, 4} print(set1 > set2) # 通過大於小於號判斷 print(set2.issubset(set1)) # set2是set1的子集,subset:子集 print(set1.issuperset(set2)) # set1是set2的超集,superset:超集 # 輸出: True True True
結語:python中集合的基本介紹就到這裏了,希望讀者都能夠有屬於自己的收穫,覺得還不錯的可以點個贊,你們的鼓勵是我最大的動力