Python零基础入门自学笔记
参考教程【Python教程】《零基础入门学习Python》最新版@B站@鱼C-小甲鱼
本文记录的主要是Python中的集合。
集合是无序的、唯一的。集合比列表效率高很多
0. 创建集合
0.0 创建集合
#0. 花括号{}
{'jiangyun','wangxiaojia'}
#{'wangxiaojia', 'jiangyun'}
#1. 集合推导式
{s for s in 'ftcy'}
#{'y', 'c', 't', 'f'}
#2. 类型构造器
set('yyyyyyds') #去重性
#{'y', 'd', 's'}
0.1 添加元素
update( ) 可以更改集合内容
s = set('ftcy')
s.update('ttl','szd','327',[531])
#{'3', 'l', 'c', 'd', 'y', 's', 'z', '2', 't', 'f', 531, '7'}
s.add('531')
#{'3', 'l', '327', 'c', 'd', 'y', 's', 'z', '2', 't', 'f', 531, '7'}
0.2 删除元素
s = set('ftcy')
s.remove('sjd') #会报错
s.discard('sjd') #静默处理 不会报错
s #{'c', 'y', 't', 'f'}
s.pop() #随机弹出,弹出的就被删除了
s.clear() #清空集合
0.3 运算改写集合
s = set('ftcy')
t = set('ttl')
s.intersection_update(t) #s {'t'}
t.difference_update(s) #t {'l'}
s.symmetric_difference_update(t) # s{'t', 'l'}
1. 集合运算
1.0 检查集合内是否有某个元素 in
s = set('yyyyyyds')
'y' in s
1.1 是否有重复元素
s = [1,1,2,3,5] #列表可以重复
len(s) == len(set(s)) #列表和集合长度不一样
#False
1.2 是否有交集
s = set('ftcy')
s.isdisjoint(set('yds')) #是否无交集
#False 说明有交集,y
1.3 是否子集/超集
s = set('ftcy')
t = set('ftcyszd')
s.issubset(t) #子集
t.issuperset(t) #超集
#True
s <= set(t) #子集
s < set(t) #真子集
t > set(s) #真超集
t >= set(s) #超集
1.4 并集
s = set('ftcy')
s.union({'ttl'})
#{'t', 'f', 'c', 'ttl', 'y'}
s | t | set('szd')
#{'t', 'f', 'l', 'd', 'c', 'y', 's', 'z'}
1.5 求交集
s = set('ftcy')
s.intersection({'ttl'})
#set()
t = set('ttl')
s.intersection(t)
#{'t'}
s & t & set('szd')
#set()
1.6 差集
s = set('ftcy')
t = set('ttl')
s.difference(t) #{'c', 'y', 'f'}
t.difference(s) #{'l'}
s - t - set('szd')
#{'c', 'y', 'f'}
以上可以多参数。
1.7 求对称差集
只能两个参数。不能多参数。
A∪B➖A∩B
s = set('ftcy')
t = set('ttl')
s.symmetric_difference(t) #{'l', 'c', 'y', 'f'}
s ^ t #{'l', 'c', 'y', 'f'}
使用运算符,两侧必须都是集合类型。
2. 不可变集合
set( ) 创建的是可变集合
frozenset( )
t = frozenset('ftcyszd')
t #frozenset({'c', 'd', 'y', 's', 'z', 't', 'f'})
3. 可哈希
字典的键、集合的元素,都必须是“可哈希”的。
可哈希:哈希值不变
不可变的对象,是可哈希的;
可变的对象,是不可哈希的。
hash(1) #1 对整数,哈希值是本身
hash(1.0) #1 不同对象,值相等,哈希值相等
hash([1,2,3]) #会报错
#列表、集合是可改的,不可哈希的。
hash((1,2,3)) #可哈希
可变集合不可哈希,但是不可变集合可哈希。于是有👇
嵌套集合
x = {1,2,3}
y = {x,4,5} #会报错
x = frozenset(x)
y = {x,4,5} #{frozenset({1, 2, 3}), 4, 5}