目录
2.其他内置方法(删除元素,更新update(),添加add,交集)
·作用,定义
集合三大特点:存必须为不可变类型,无序,不重复
1.作用:关系运算,去重
1.1关系运算
friend1 = ['zcr', 'dfg', 'rty', 'yui']
friend2 = ['rty', 'dfg', 'mjy', 'sdt']
找出共同好友普通for遍历:
l1 = []
for i in friend1:
if i in friend2:
l1.append(i)
print(l1) # ['dfg', 'rty']
集合关系
print(list(set(friend1) & set(friend2))) # ['dfg', 'rty']
1.2去重
2.定义:在{}内用逗号分隔开多个元素,多个元素满足以下三个条件:
1.集合内元素必须为不可变类型
2.打印出来的集合元素无序
3.打印出来的集合元素没有重复
s1 = {1, 2} # s = set({1, 2})
s2 = {} # 默认为空字典
s3 = set() # 定义新集合方法
print(type(s3)) # <class 'set'>
·类型转换
类型转换
但凡能被for循环的遍历的数据类型
(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
print(set([1, 2, 3, 4])) # {1, 2, 3, 4}
print(set((1, 2, 3, 4))) # {1, 2, 3, 4}
print(set({'name': 'wsx', })) # {'name'}
print(set('zcy')) # {'c', 'y', 'z'}
print(set({12, 'fb', [12, 2]})) # 错误,循环出来的元素有可变类型
print(set({'k1': 123, 'k2': 456})) # {'k1', 'k2'}
·内置方法
1.优先掌握(关系运算,去重)
1.关系运算
friend1 = {'zcr', 'dfg', 'rty', 'yui'}
friend2 = {'rty', 'dfg', 'mjy', 'sdt'}
1.1取交集(2种):
print(friend1 & friend2) # {'dfg', 'rty'}
print(friend1.intersection(friend2)) # {'dfg', 'rty'}
1.2合集/并集(2种):
print(friend1 | friend2) # {'zcr', 'dfg', 'yui', 'sdt', 'rty', 'mjy'}
print(friend1.union(friend2)) # {'zcr', 'dfg', 'yui', 'sdt', 'rty', 'mjy'}
1.3差集(2种):
print(friend1 - friend2) # 求f1独有的 {'yui', 'zcr'}
print(friend1.difference(friend2))
print(friend2 - friend1) # 求f2独有的 {'mjy', 'sdt'}
print(friend2.difference(friend1))
1.4对称差集(2种) 求两个用户独有的好友们(即去掉共有的好友):
print(friend1 ^ friend2) # {'yui', 'mjy', 'sdt', 'zcr'}
print(friend1.symmetric_difference(friend2))
1.5父集(2种):一个集合是否包含另外一个集合
print({1, 2, 3} > {1, 2}) # true
print({1, 2, 3}.issuperset({1, 2})) # true,1>2
print({1, 2, 3}.issubset({1, 2})) # false,1<2
print({1, 2, 3} >= {1, 3, 4, 5}) # false
print({1, 2, 3} >= {1, 2, 3}) # true 互为父子
2.去重
去重局限性: 1. 只能针对不可变类型
2. 集合本身是无序的,去重之后无法保留原来的顺序
2.1只能针对不可变类型:
s1 = set([12, 'kd', 456])
print(s1) # {456, 12, 'kd'} 将列表转成了集合
print(list(s1)) # [456, 12, 'kd'] 集合转列表
2.2集合本身是无序的,去重之后无法保留原来的顺序:
l1 = [1, 'f', 'u', 8, 'u']
print(set(l1))
2.3特殊:去重依旧保持顺序:
l2 = [
{'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'},
]
l3 = []
for dic in l2:
if dic not in l3:
l3.append(dic)
print(l3)
# [{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'jack', 'age': 73, 'sex': 'male'},
{'name': 'tom', 'age': 20, 'sex': 'female'}]
3.长度
s2 = {'a', 'b', 'c'}
print(len(s2)) # 3
4.成员运算
print('c' in s2) # True
5.循环
for item in s2:
print(item)
2.其他内置方法(删除元素,更新update(),添加add,交集)
1.删除元素
.discard():删除指定元素,没有则不删,
相比.remove():删不存在元素不会报错
s = {1, 21, 4, 5}
s.discard(1)
print(s3) # {1, 4, 5}
s.discard(3)
print(s) # {1, 21, 4, 5} 不会报错
s.remove(3)
print(s) # 报错
2.更新集合.update()
s4 = {1, 21, 4, 5}
s4.update({1, 2, 3})
print(s4) # {1, 2, 3, 4, 21, 5}
3.添加.add
s5 = {31, 11, 14, 15}
s5.add(63)
print(s5) # {31, 11, 14, 15, 63}
4.isdisjoint()两个集合没有交集返回true
print(s5.isdisjoint(s4)) # Ture