1.作用
去重,关系运算
2.定义
定义:在{}内用逗号分隔开多个元素,,集合具备以下三个特点:
①每个元素必须是不可变类型
②集合内没有重复元素
③ 集合内元素无序
注意点:
d = {} #默认是空字典
s = set() #空集合
3.类型转换
# 但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
>>> s = set([1,2,3,4])
>>> s1 = set((1,2,3,4))
>>> s2 = set({'name':'jason',})
>>> s3 = set('egon')
>>> s,s1,s2,s3
{1, 2, 3, 4} {1, 2, 3, 4} {'name'} {'e', 'o', 'g', 'n'}
4.使用
>>> friends1 = {"zero","kevin","jason","egon"} # 用户1的好友们
>>> friends2 = {"Jy","ricky","jason","egon"} # 用户2的好友们
- 合集/并集(|):求两个用户所有的好友(重复好友只留一个)
>>> friends1 | friends2
{'kevin', 'ricky', 'zero', 'jason', 'Jy', 'egon'}
- 交集(&):求两个用户共同的好友
>>> friends1 & friends2
{'jason', 'egon'}
- 差集(-):
>>> friends1 - friends2 # 求用户1独有的好友
{'kevin', 'zero'}
>>> friends2 - friends1 # 求用户2独有的好友
{'ricky', 'Jy'}
- 对称差集(^) # 求两个用户独有的好友们(即去掉共有的好友)
>>> friends1 ^ friends2
{'kevin', 'zero', 'ricky', 'Jy'}
- 值是否相等(==)
>>> friends1 == friends2
False
- 父集:包含返回True,不包含返回False
>>> {1,2,3} > {1,3,4,5}
False
>>> {1,2,3} >= {1,3,4,5}
False
- 子集
>>> {1,2} < {1,2,3}
True
>>> {1,2} <= {1,2,3}
True
- 长度
>>> s={'a','b','c'}
>>> len(s)
3
- 成员运算
>>> 'c' in s
True
- 循环
>>> for item in s:
... print(item)
...
c
a
b
5.去重
去重:只针对不可变类型
集合本身是无序的,去充值后无法保留原来的顺序
>>> l=['a','b',1,'a','a']
>>> s=set(l)
>>> s # 将列表转成了集合
{'b', 'a', 1}
>>> l_new=list(s) # 再将集合转回列表
>>> l_new
['b', 'a', 1] # 去除了重复,但是打乱了顺序
- 针对不可变类型,并且保证顺序则需要我们自己写代码实现
l=[
{'name':'lili','age':18,'sex':'male'},
{'name':'jack','age':73,'sex':'male'},
{'name':'tom','age':20,'sex':'female'},
{'name':'lili','age':18,'sex':'male'},
{'name':'lili','age':18,'sex':'male'},
]
new_l=[]
for dic in l:
if dic not in new_l:
new_l.append(dic)
print(new_l)
# 结果:既去除了重复,又保证了顺序,而且是针对不可变类型的去重
[
{'age': 18, 'sex': 'male', 'name': 'lili'},
{'age': 73, 'sex': 'male', 'name': 'jack'},
{'age': 20, 'sex': 'female', 'name': 'tom'}
]
6.可变类型与不可变类型
可变数据类型:值发生改变时,内存地址不变,即id不变,证明改变原值
不可变类型:值发生改变时,内存地址发生改变,即id也变,证明是没有在改变原值,是产生了新的值
- 按存值个数分
只能存一个值:可称为标量/原子类型 | 数字、字符串 |
---|---|
可以存放多个值:可称为容器类型 | 列表、元组、字典、集合 |
- 按照访问方式区分
直接访问:只能通过变量名访问整个值 | 数字 |
---|---|
顺序访问:可以用索引访问指定的值,索引代表顺序,又称为序列类型 | 字符串、列表、元组 |
key访问:可以用key访问指定的值,又称为映射类型 | 字典 |
- 按照可变不可变区分
可变类型 | 列表、字典 |
---|---|
不可变类型 | 数字、字符串、元组 |