一.集合set
1.描述:数学概念,一堆确定的、无序的、唯一的数据
2.特征:
数据无序:无法使用索引和分片
数据唯一:可用来排除重复数据
3.遍历:可哈希不可哈希
**可哈希的数据类型,即不可改变的数据结构
**可哈希:int、string、float、tuple, 不可哈希:list、set、dict不可以
**字符串是可哈希的,a=’1’ a=’2’,实际上是a的指针变化了,从’1’的内存地址 指向了 ‘2’ 的内存地址
s={(1,2,3),(4,5,6),(7,8,9)} #集合、列表、字典不可哈希,所以{{1,2,3},[4,5,6],{1:2,2:3,3:4}}不对
for k,m,n in s:
print(k,'--',m,'--',n)
for k in s:
print(k)
4.集合生成式
l=[1,2,3,4,5,5,6]
s={i for i in l if i%2==1}
print(s)
s1={1,2,3}
s2={'l','g','q'}
s={m*n for m in s1 for n in s2}
print(s)
5.添加元素add (insert插入,append追加,add添加)
s={5,3,2,1}
s.add(4)
print(s)
6.删除元素:remove、discard、pop、clear
s={5,3,2,1}
s.remove(2) #remove:删除集合中的2,如果2不在集合中则报错
print(s)
s.discard(100) #discard:删除集合中的100,如果100不在集合中不报错
print(s)
s.pop() #pop:随机删除集合中的一个元素
print(s)
s.clear() #clear:清空集合
print(s)
7.集合的函数:
intersection(交集)、difference(差集)、union(并集)、
issubset(检查一个集合是否为另一个集合的子集)、
issuperset(检查一个集合A是否是另一个集合B的超集,即B是否是A的子集)、
s1={1,2,3,4,5,6}
s2={4,5,6,7,8,9}
s_1=s1.intersection(s2) #intersection:求集合s1、s2的交集
print(s_1)
s_2=s1.difference(s2) #difference:求集合s1、s2的差集
print(s_2)
print(s1-s2) #‘-’:求集合s1、s2的差集,同difference
s_3=s1.issubset(s2) #issubset:求集合s1是否是s2的子集
print(s_3)
8.冰冻集合:不能修改的集合
s=frozenset({1,2,3,4,5,6})
print(s)
二.字典dict
1.描述:没有顺序的键值对,形式为 {键:值 ,键:值 ,键:值}
2.创建字典
d=dict() #创建空字典
print(d)
d={'one':1,'two':2,'three':3} #直接用键值对创建
print(d)
d=dict({'one':1,'two':2,'three':3}) #dict+字典内容创建
print(d)
d=dict(one=1,two=2,three=3) #关键字创建,keyword can't be an expression,所以one不能加引号
print(d)
d=dict([('one',1),('two',2),('three',3)]) #list+tuple创建
print(d)
3.特征
无序:没有分片和索引
key必须可哈希:int、string、float、tuple可以,list、set、dict不可以
value可以使任何值
4.字典常用操作
访问、改变、删除数据:
d={'one':1,'two':2,'three':3}
print(d['one']) #访问某个值
d['one']='one' #改变某个值
print(d)
del d['one'] #删除
print(d)
成员检测:
d={'one':1,'two':2,'three':3}
if 'one' in d: #检测key 或if 'one' in d.keys():
print('one')
if 1 in d.values(): #检测value
print(1)
if ('one',1) in d.items(): #检测key和value
print('one',1)
遍历:
d={'one':1,'two':2,'three':3}
for k in d.keys(): #遍历key,也可以for k in d:
print(k,d[k])
for v in d.values(): #遍历value
print(v)
for k,v in d.items(): #遍历键值对
print(k,'--',v)
字典生成式:
d={'one':1,'two':2,'three':3}
dd={k:v for k,v in d.items() if v%2==1}
print(dd)
5.字典相关函数
通用函数:len、max、min、clear
items:返回字典键值对组成的元组,该结构可迭代
keys:返回字典的键组成的一个结构,可迭代
values:返回字典的值组成的一个结构,可迭代
d={'one':1,'two':2,'three':3}
i=d.items()
print(i)
print(type(i))
k=d.keys()
print(k)
print(type(k))
v=d.values()
print(v)
print(type(v))
get:根据键返回相应的值,好处是可以设置默认值
d={'one':1,'two':2,'three':3}
print(d.get('one','该数据不存在')) #若one不在d中则返回默认值
print(d.get('one33','该数据不存在'))
print(d['one']) #该方法如果one不在d中会报错
fromkeys:使用一个序列作为键,使用一个值作为字典的所有键的值
l=['one','two','three']
d=dict.fromkeys(l,'hhh')
print(d)