1. 程式人生 > 實用技巧 >資料型別-集合set

資料型別-集合set

一、

1、用途
(1)去重
(2)關係運算
注:集合的目的是將不同的值存放到一起,不同的集合間用來做關係運算,無需糾結於集合中單個值

2、定義方式:在{}內用逗號分割開多個元素,其中元素的特點為
(1)所有的元素必須是不可變型別
(2)集合內元素不能重複
(3)集合內元素無序
s={123,123,123,123,333,4444,555} # s = set(...)
print(s) #自動去重功能,返回:{555, 123, 4444, 333}

二、優先掌握的操作

2.1資料型別轉換

s=set('hello')
print(type(s)) #返回set
print(set([11,11,11,22,[33,44])) # 報錯:無法把可變型別放入集合

2.2 去重

infos = [
{'name': 'sean', 'age': 18, 'sex': 'male'},
{'name': 'jack', 'age': 73, 'sex': 'male'},
{'name': 'tom', 'age': 20, 'sex': 'female'},
{'name': 'egon', 'age': 18, 'sex': 'male'},
{'name': 'egon', 'age': 18, 'sex': 'male'},
]
l = [] #建立列表
for info in infos: #迴圈判斷,info中資訊是否在infos內,如果不在則按順序依次增加
if info not in l:
l.append(info)
print(l)

print(set(infos)) #報錯:unhashable type: 'dict'


names=['sean','egon','egon',18,18,18,10]
name = set(names)
print(name) #{18, 10, 'egon', 'sean'}
print(type(name)) #set

2.3關係運算

2.3.1 手寫程式碼求交集:

交集
python_stus=["張三",'sean','jack','lili','李四']
linux_stus=['李大炮','李二炮','jack','lili','王三炮']
l = []
for stu in python_stus:
if stu in linux_stus:
l.append(stu)
print(l) #['jack', 'lili']

2.3.2 集合的關係運算

python_stus=["張三",'sean','jack','lili','李四']
linux_stus=['李大炮','李二炮','jack','lili','王三炮']

(1)交集:既報名python又報名linux的學員。 符號:&或intersection

res=python_stus & linux_stus  #&
print(res) #{'jack', 'lili'} 推薦使用集合符號求交集
res=python_stus.intersection(linux_stus)
print(res) #{'jack', 'lili'}

(2)並集:所有學員的姓名:符號:|或union

res=python_stus | linux_stus #推薦使用集合符號求並集|
print(res)
res=python_stus.union(linux_stus) #union並集
print(res)

(3)差集:只報名python的學員 :符號:-;或difference

res = python_stus - linux_stus #只報名python的學員
resl =linux_stus - python_stus #只報名linux的學員
print(res)
print(resl)
res = python_stus.difference(linux_stus) #只報名python的學員
resl = linux_stus.difference(python_stus) #只報名Linux的學員
print(resl)

(4)對稱差集: 只報名python的學員和只報名了linux的學員 符號:^ 或symmetric_difference

res = (python_stus - linux_stus) | (linux_stus - python_stus) #先求差集後求並集
resl = linux_stus ^ python_stus # ^求對稱差集
print(res)
print(resl)
res= linux_stus.symmetric_difference(python_stus) # symmetric_difference求對稱差集
print(res)

(5)父子集:包含與被包含的關係 注:包含才能比大小,否則報錯。issuperset為包含;issubset為被包含。

s1={1,2,3}
s2={1,2}

print(s1.issuperset(s2)) #成立返回True,否則返回False
print(s2.issubset(s1)) #成立返回True,否則返回False
print(s1.issubset(s2)) #成立返回True,否則返回False
print(s2.issuperset(s1)) #成立返回True,否則返回False
print(s1 >= s2) # 如果s1包含s2則成立,稱之為s1是s2他爹
print(s2 <= s1) # 如果s1包含s2則成立,稱之為s1是s2他爹