字典、元组、集合
- 一、字典(可变)
- 1.字典是什么
- 2.字典的原理
- 3.字典的创建
- 4.字典元素的获取
- 5.字典的常用操作
- 6.字典的特点
- 7.字典生成式
- 二、元组(不可变)
- 1.何为元组
- 2.创建元组
- 3.为何不可变
- 4.遍历
- 三、集合
- 1.集合是什么
- 2.创建集合
- 3.集合的相关操作
- 4.集合间的关系
- 5.集合的运算
- 6.集合生成式
一、字典(可变)
1.字典是什么
和列表一样是可变序列,用{ }定义,以键值对方式存储数据 key:value—{‘张三’:100, ‘李四’:97}
是一个无序序列(集合),列表为有序
字典中的键(key)存放数据根据哈希函数计算而来hash哈希值,key必须为不可变序列(字符串)
可变与不可变:指的是对象是否改变
细谈python序列可变与不可变
2.字典的原理
先计算哈希函数,找到key的位置,无需遍历
3.字典的创建
scores = {'我':100,'他':10,'她':99,}
print(scores)
print(type(scores))
#使用内置函数
students = dict(name='K', age=7)
print(students)
#空字典
a = dict{}
{‘我’: 100, ‘他’: 10, ‘她’: 99}
<class ‘dict’>
{‘name’: ‘K’, ‘age’: 7}
4.字典元素的获取
scores = {'我':100,'他':10,'她':99,}
print(scores['我'])
print(scores.get('她'))
print(scores.get('这个元素不存在'))#返回None
print(scores.get('这个元素不存在,但是可以返回自定义值',66))#返回66
100
99
None
66
5.字典的常用操作
key的判断:in,not in
键值对的删除:del[‘张三’]
清空字典元素:scores.clear()
键值对的新增(修改同样的格式):scores['陈六‘] = 89
获取key:keys = scores.keys()
获取value:values = scores.values()
获取items:items = scores.items()
将获得的keys(values)变为列表list(keys);items可变为元组list(items)
字典元素的遍历:
for item in scores:
print(item,scores[item],scores.get(item))
6.字典的特点
1.不允许元素的key重复
2.元素都是无序的,顺序都是哈希值算出来的
3.key必须为不可变对象:整数,字符串
4.字典也是动态伸缩的
5.浪费内存,节约时间
7.字典生成式
将两个列表的各个元素对应打包成键值对并生成字典
items = ['Fruits','Books','Others']
prices = [96,78,85,99,87]
#后面多出来的直接无视
#upper()转换大写
d = {item.upper():price for item,price in zip(items,prices)}
print(d)
{‘FRUITS’: 96, ‘BOOKS’: 78, ‘OTHERS’: 85}
二、元组(不可变)
1.何为元组
不可变序列:无增删改操作,不可变即无法不变对象(地址)的情况下增删改
t = (18,'j')
2.创建元组
t = ('Python',18,'j')
print(t)
t1 = tuple((28,'jk罗琳'))
t2 = 'Python',18,'j'
#可省略小括号
print(t1,t2)
print(type(t2))
t3 = (90,)#单个元素
print(t3)
print(type(t3))
#空元组,与字典、列表相对应
t4 = ()
t5 = tuple()
(‘Python’, 18, ‘j’)
(28, ‘jk罗琳’) (‘Python’, 18, ‘j’)
<class ‘tuple’>
(90,)
<class ‘tuple’>
3.为何不可变
1.多任务环境下可以不加锁
2.元组的元素不可变,但是若元素为可变对象(序列,字典),则可变对象的元素内容可变,即序列中的元素可变,如下图:
t = (89,['uj',78],90)
4.遍历
元组可迭代
t = ('Python',18,'j')
for words in t:
print(words)
三、集合
1.集合是什么
集合是没有value的字典,就是只有key值,同样以哈希函数计算位置
2.创建集合
s = {3,2,43,2,65,4,8}
print(s)#集合中的元素不可重复
s_ = set(range(8))
print(s_)
s_1 = set([1,2,3,3,4,4])
print(s_1)
s_2 = set((1,2,3,4,567))
print(s_2)
s_3 = set('python')
print(s_3)
#空集合无法直接用{}
s_4 = set()
3.集合的相关操作
- 判断是否存在某个元素
in/not in
- 新增
s.add(80)#只能添加一个操作
s.update([80,90,78])#将列表的元素加到集合里
s.update((66,56,37))#将元组的元素加到集合里
- 删除
s.remove(89)#无元素时会报错
s.discard(90)#没有这个元素时不会报错
s.pop()#无参数,随机弹出元素
s.clear()#无参数
4.集合间的关系
- 可比较是否相同:只要元素相同,就相同(地址也一样)
s = {1,2,3,4}
s_2 = {4,3,2,1}
print(s == s_2)
print(s != s_2)
- 子集判断
s1 = {1,2,3,4,5,6}
s2 = {1,2,3,4}
print(s2.issubset(s1))#True子集
print(s1.issuperset(s2))#True超集
print(s1.isdisjoint(s2))#True不是交集
5.集合的运算
- 交集
s1 = {1,2,3,4,5,6}
s2 = {3,5}
print(s1.intersection(s2))
print(s2 & s2)
- 交集
print(s1.union(s2))
print(s1 | s2)
- 差集
print(s1.difference(s2))
print(s2.difference(s1))#输出set()空集
print(s1 - s2)
- 对称差集
print(s1.symmetric_difference(s2))
print(s1 ^ s2)
6.集合生成式
将列表的中括号变为花括号就好
s = {i for i in range(6)}#无序的!