1. 程式人生 > >Python 基礎 - Day 2 Learning Note - Set 集合

Python 基礎 - Day 2 Learning Note - Set 集合

基礎 差集 可變集合 自動 lap 完全 添加 key值 com

集合是一個無序的,不重復的數據組合,它的主要作用如下:

  • 去重,把一個列表變成集合,就自動去重了
  • 關系測試,測試兩組數據之前的交集、差集、並集等關系
  • SET的分為 可變集合 和 不可變集合(frozon set)。
    • 可變集合可以添加或者刪除,但是frozon set 不可以
    • 可變集合不是可哈希的,所以不可以做DICTIONARY的KEY。但是frozon set有哈希值,可以作為key值。

創建

set 和 list([])及dictionary({})不同,沒有語法格式。只有用工廠方法 set() or frozenset() 創建。

技術分享
list_1= [1,4,8,9,4,10,12]
list_1 
= set(list_1) print(list_1,type(list_1))
View Code

{1, 4, 8, 9, 10, 12} <class ‘set‘>

添加

list_3.add(‘c‘)
print(list_3)
list_4.update([888,777])
print(list_4)

{1, 3, ‘c‘, 7}
{2, 4, 6, 777, 888}

刪除

list_3.remove(3)  #remove 和 discard 的區別在於是否報錯。remove會,discard比較友好 - do nothing if the element does not exit in the set.
print(list_3)

{1, ‘c‘, 7}

*pop() 隨機刪

關系測試

list_1 = set([1,4,8,9,4,10,12])
list_2 = set([2,3,4,8,11,12])

print(list_1.intersection(list_2))    #交集,可用 list_1 & list_2 代替

{8, 4, 12}

print(list_1.union(list_2))    #並集並去重,可用 list_1 | list_2 代替

{1, 2, 3, 4, 8, 9, 10, 11, 12}

print(list_1.difference(list_2))    #
差集=in list_1 but not in list_2; 可用 list_1 - list_2

{1, 10, 9}

print(list_1.issubset(list_2))   #判斷是否子集 
print(list_1.issuperset(list_2))  #判斷是否父集

False

print(list_1.symmetric_difference(list_2))  #對稱差集:並集-交集部分; 可用 list_1 ^ list_2

{1, 2, 3, 9, 10, 11}

list_3 = set([1,3,7])
list_4 = set([2,4,6])
print(list_3.isdisjoint(list_4))    #是否完全無關?

True

成員關系 (in, not in) & 等價/不等價

和其他容器類型一樣, set 仍舊支持 in 或 not in,等價不等價等操作符號, 同時由len()得到set 的基數(大小), 用for循環叠代集合的成員。但是不可以創建索引或切片。

Python 基礎 - Day 2 Learning Note - Set 集合