一、集合(set)
1、语法构造
例:v = {1,‘ab’,5}
(1)由不同元素组成
(2)元素是无序的
(3)集合中元素必须是不可变类型(可哈希类型)
2、常用的方法
(1)add() 添加元素
s = {1,2,3}
s.add('abc')
print(s) #{1, 2, 3, 'abc'}
(2)clear() 清除集合内所有元素
s = {1,2,3}
s.clear()
print(s) #set()
(3)copy() 复制一个集合
s = {1,2,3}
v = s.copy()
print(v,id(s),id(v)) #{1, 2, 3} 2207112195872 2206965372288
(4)pop() 随机删除一个元素
s = {1,2,3}
s.pop()
print(s) #{2, 3}
(5)remove() 删除元素,不存在会报错;discard() 删除元素,不存在不会报错
s = {1,2,3}
s.remove(2)
print(s) #{1, 3}
s.discard('aa')
print(s) #{1, 3}
(6)intersection() 求交集(&)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
print(s1.intersection(s2)) #{3, 'ab'}
print(s1 & s2) #{3, 'ab'}
(7)union() 求并集(|)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
print(s1.union(s2)) #{1, 2, 3, 4, 6, 'ab'}
print(s1 | s2) #{1, 2, 3, 4, 6, 'ab'}
(8)difference() 求差集(-)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
print(s1.difference(s2)) #{1, 2}
print(s1 - s2) #{1, 2}
(9)symmetric_difference() 求交叉补集(^)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
print(s1.symmetric_difference(s2)) #{1, 2, 4, 6}
print(s1 ^ s2) #{1, 2, 4, 6}
(10)difference_update() 计算差集并更新(其他相关update()函数功能类似)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
s1.difference(s2)
print(s1.difference(s2),s1) #{1, 2} {'ab', 1, 2, 3}
s1.difference_update(s2)
print(s1) #{1, 2}
(11)isdisjoint() 判断两个集合是否不相交(即交集为空)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
print(s1.isdisjoint()) #False
(12)issubset() 判断是否为子集/真子集(<= / <)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 'ab'}
s3 = {1, 2, 3, 'ab'}
print(s2.issubset(s1),s2<=s1,s3<s1) #True True False
(13)issuperset() 判断是否为父集(>= / >)
s1 = {1, 2, 3, 'ab'}
s2 = {3, 'ab'}
s3 = {1, 2, 3, 'ab'}
print(s1.issuperset(s2), s3 > s2, s3 == s1) # True True True
(14)update() 更新为两个集合的并集
s1 = {1, 2, 3, 'ab'}
s2 = {3, 4, 'ab', 6}
s1.update(s2)
print(s1) #{1, 2, 3, 4, 6, 'ab'}
二、数据类型总结
1、分类
(1)按元素是否可变分类
可变:列表,字典、集合
不可变:字符串、数字、元组
(2)元素按访问顺序分类:
直接访问:数字
按下标访问:字符串、列表、元组
按映射访问:字典
(3)按存放元素个数分类:
原子类型:数字、字符串
容器类型:列表、元组、字典、集合
2、类型转换
可用类型名进行转换,例:
lst = [1,2,3]
s = set(lst)