集合set
可變的無序的
不重複的元素集合
set定義 初始化
set() 生成乙個空集合
set(iterable) 可通過可迭代物件生產乙個新的集合
s1 =set()
s2= set(range(5))
s3= set(list(range(10)))
s4= {} #這是字典的定義方法
s5 = #set
s6 =
s7= #set的元素要求必須可以hash 列表不能hash
set的元素要求必須可以hash
目前學過的不可hash的型別有list、set
元素不可以索引
set可以迭代
set增加
add(elem)
增加乙個元素到set中
如果元素存在,什麼都不做
update(*others)
合併其他元素到set元素中來
引數others必須是可迭代物件
就地修改
set刪除
remove(elem)
從set中移除乙個元素
元素不存在,丟擲異常keyerror異常
discard(elem)
從set中移除乙個元素
元素不存在,什麼都不做
pop() -> item
移除並返回任意的元素
空集返回keyerror異常
clear()
移除所有元素
集合基本概念
全集所有元素的集合。例如實數集,所有實數組成的集合就是全集
子集subset和超集superset
乙個集合a所有元素都在另乙個集合b內,a是b的子集,b是a的超集
真子集和真超集
a是b的子集,切a不等於b,a就是b的真子集,b是a的真超集
並集多個集合合併的結果
交集多個集合的公共部分
差集集合中除去和其他集合的公共部分
集合運算
並集將兩個集合a和b的所有元素合併在一起,組成的集合稱作集合a與集合b的並集
union(*others) 返回和多個元素合併後的新集合
| 運算子過載 等同union
update(*others) 和多個集合合併,就地修改
|= 等同update
交集集合a和集合b,由所有屬於a且屬於b的元素組成的集合
intersection(*others) 返回和多個集合的並集
& 等同於intersection
intersection_update(*others) 獲取和多個集合的交集,並就地修改
&= 等同於intersection_update
差集集合a和b,由所有屬於a切不屬於b的元素組成的元素
difference(*other) 返回和多個集合的差集
- 等同於difference
difference_update(*other) 獲取和多個集合的差集並就地修改
-= 等同於difference_update
對稱差集
集合a和b,由所有不屬於a和b的交集元素組成的集合,記作(a-b) u (b-a)
symmetric_difference(other) 返回和另乙個集合的差集
^ 等同於symmetric_difference
symmetric_difference_update(other) 獲取和另乙個集合的差集就地修改
^= 等同於symmetric_difference_update
issubset(other)、<=
判斷當前集合是否是另乙個集合的子集
set1 < set2
判斷set1是否是set2的真子集
issuperset(other)、>=
判斷當前集合是否是other的超集
set1 > set2
判斷set1是否是set的真超集
isdisjoint(other)
當前集合和另乙個集合沒有交集
沒有交集、返回true
集合應用
1、共同好友
你的好友a、b、c,他的好友b、c、d,求共同好友
.intersection()
並集,所有的群裡的人的好友形成乙個並集,userid in (a|b|c|...) ,使用者id不存在這個並集中,說明他和任何人都不是朋友
3、許可權判斷
有乙個api,要求許可權同時具備a、b、c才能訪問,使用者許可權是b、c、d,判斷使用者是否能訪問該api
api集合a,許可權集合p
a - p = {} , a-p為空集,說明p包含a
a.issubset(p) 也行,a是p的子集也行
a & p = a 也行
有乙個api,要求許可權具備a、b、c任意一項就可以訪問,使用者許可權b、c、d,判斷使用者是否能訪問該api
api集合a,許可權集合p
a & p != {} 就可以
a.isdisjoint(p) == false 表示有交集
4、乙個總任務列表,儲存所有任務。乙個完成的任務列表。找出為未完成的任務
業務中,任務id一般不可以重複
所有已完成任務id放到乙個set中,假設為completed,它是all的子集
all - completed = uncompleted
集合練習
隨機產生2組各10個數字的列表,如下要求:
每個數字取值範圍[10,20]
統計20個數字中,一共有多少個不同的數字 #交集
2組之間進行比較,不重複的數字有幾個?分別是什麼? #對稱差集
2組之間進行比較,重複的數字有幾個?分別是什麼? #並集
a = [1, 9, 7, 5, 6, 7, 8, 8, 2, 6]
b= [1, 9, 0, 5, 6, 4, 8, 3, 2, 3]
s1=set(a)
s2=set(b)print(s1) #去重
print(s2) #去重
print(s1.union(s2)) #並集 去重
print(s1.symmetric_difference(s2)) #對稱差集
print(s1.intersection(s2)) #交集
Python set例項透析
set是無序unique值的集合,常用來去重,檢驗membership等。set類似乙個詞典,但只有鍵key,沒有值value,好多操作也類似,但不支援索引,切片等操作。a set 1,2,3,1 b set 2,3,4 aprint bset 2,3,4 alen a 32 in atrue遍歷 ...
Python set 函式詳解
在python set是基本資料型別的一種集合型別,它有可變集合 set 和不可變集合 frozenset 兩種。建立集合set 集合set新增 集合刪除 交集 並集 差集的操作都是非常實用的方法。python set類是在python的sets模組中,大家現在使用的python2.7.x中,不需要...
python set 常用方法
1 add 2 clear 3 copy 淺拷貝 4 difference 判斷兩個set的不同,並且拿到他們的不同返回乙個新列表 5 differnce update 是將原來的set跟新,set.difference update eric blare 把與原來相同的剔除,不返回乙個新的set,...