数据类型-集合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他爹

原文地址:https://www.cnblogs.com/datatool/p/13360711.html