python集合數據類型詳解

集合

前言:首先我問大家幾個問題,什麼是集合?集合的作用是什麼?集合是可變的數據類型嗎?下面我們就按照這些問題進行展開。

  1. 什麼是集合?

由不同元素組成的集合,集合是一組無序排列 可hash值,可作爲字典的key。集合的目的是將不同的值存放在一起,不同的集合間用來做關係運算。

  1. 集合的作用

我認爲集合有兩個作用,一個是集合本身的性質 ‘’去重‘’,另一個集合可以用來做關係測試,比如交集,並集,差集,反交集(個人叫法)

  1. 集合是可變數據類型嗎?
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'

集合的方法

  1. 集合的創建

    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'>
    
  2. 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}
    
  3. a) remove() 刪除指定元素

    set1 = {1, 2, '小紅'}
    set1.remove('小紅')
    print(set1)
    
    # 輸出:
    	{1, 2}
    

    b) pop() 隨機刪除一個元素

    set1 = {'李明', '小蘭', '小紅'}
    set1.pop()
    print(set1)
    
    # 輸出:
    	 多種結果
    
  4. 改,查
    因爲集合是無序的,所以不提供改和查的功能,但還是有隔山打牛的方式進行更改

    a) 改 我們先刪除要改的元素,然後進行添加元素

    set1 = {'李明', '小蘭', '小紅'}
    set1.remove('小紅')
    set1.add('李華')
    print(set1)
    
    # 輸出:
    	{'小蘭', '李華', '李明'}
    

    b) 查 通過 in 或者 not in 判斷元素是否在集合內

    set1 = {'李明', '小蘭', '小紅'}
    print('李明' in set1)
    print('憨憨' in set1)
    
    # 輸出:
    	True
    	False
    

重點

前面說了集合的幾個作用:

  • 去重
  • 做關係測試
  1. 去重,當我們要對列表進行去重時,我們可以將列表轉爲集合再轉爲列表,即可完成去重工作

    set1 = [1, 2, '你好', 2, 7, '你好']
    set1 = set(set1)
    print(set1)
    print(list(set1))
    
    # 輸出:
    	{1, 2, '你好', 7}
    	[1, 2, '你好', 7]
    
  2. 關係測試

    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}
    
  3. 判斷子集與超集

    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中集合的基本介紹就到這裏了,希望讀者都能夠有屬於自己的收穫,覺得還不錯的可以點個贊,你們的鼓勵是我最大的動力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章