元组
是一个拥有索引的、不可变的序列
元组中必须有逗号,例如在创建空元组时必须为(,)
,但空元组时没有任何意义的,如果所创建的并非空元组,可以将括号省略。
元组解包指将元组当中的每一个元素都赋值给一个变量
访问
访问元组元素的方式同列表
例如:
tuple1 = (1,2,3,4,5)
print(tuple1[2])
结果:
3
切片
元组也可以进行切片
tuple1 = (1,2,3,4,5)
print(tuple1[2::])
结果:(3, 4, 5)
拆包
拆包的时候只能有一个*,*接收参数以后,结果用一个列表来存储。
例如:
tuple1 = (1,2,3,4,5)
a,*b = tuple1
print(a,b)
结果:
1[2,3,4,5]
此方法同样适用于字符串
例如:
ABC = abcdef
a,*b = ABC
print(a,b)
结果:
a[b,c,d,e,f]
字典
mapping 映射关系
在字典中每一个key都是唯一的
key-value被称为键值对
字典创建方式
{}
创建方式:a = {}
字典赋值创建:
a = {'':'', #逗号不能漏!!!
'':'' }
- 使用dict类创建字典:
a = dict(key的名称='',key的名称='') #逗号不能漏!!!key的名称直接打,不需要其他符号包裹;''内可以也是一个数字
- dict双值子序列创建字典
a = dict([('',''),('','')]) #逗号不能漏!!!
双值子序列,
双值序列:例如列表[1,2]
;
子序列:例如字符串'a'
,
简单地说,就是序列之间的嵌套,例如列表与元组的嵌套
字典的方法
-
len()
检查字典中key的个数 -
in 或 not in
判断指定的key是否在字典中
用法:''(key名称) in 字典名称
结果会是一个布尔值 -
获取值
字典名称['key名称']
如果字典中不存在这个值会报错字典名称.get(key名称)
如果字典中不存在这个值不会报错
- 修改字典
字典名称[key名称] = ''
字典名称.default
如果这个key已经存在于字典中,则返回value,不会对字典有影响,
如果不存在,则向字典中添加这个key,并设置value
例如:
a = {'序号':1,'姓名':'shaoji'}
b = a.setdefault('技能','火球')
print(b)
结果:
{'序号':1,'姓名':'shaoji','技能':'火球'}
字典①.update(字典②)
即将字典②中的key—value添加到字典①中
a = {'序号':1,'姓名':'shaoji'}
b = {'序号':2,'技能':'火球'}
c = b.upadte(a)
print(c)
结果:
{'序号':1,'姓名':'shaoji','技能':'火球'}
del 字典名称[key名称]
’
关键字删除
例如:
a = {'序号':1,'姓名':'shaoji','技能':'火球'}
b = del dict['技能']
print(b)
结果:
{'序号':1,'姓名':'shaoji'}
字典名称.popitem()
随机关键字删除,一般都删除最后一个,删除后会返回所删除的值
例如:
a = {'序号':1,'姓名':'shaoji','技能':'火球'}
b = a.popitem() #空格不能漏!!!
结果:
{'序号':1,'姓名':'shaoji'}
dict.pop(key名称,[default])
据key来删除键值对, 但所返回的值是你删除key对应的value
例如:
a = {'序号':1,'姓名':'shaoji','技能':'火球'}
b = a.pop('技能') #空格不能漏!!!
print(b)
print(a)
{'序号':1,'姓名':'shaoji'}
结果:
火球
若删除原字典中没有的key:
例如:
c = a.pop('战斗力',5)
print(c)
print(a)
结果:
5
{'序号':1,'姓名':'shaoji','技能':'火球'}
字典名称.clear()
即清空字典
例如:
a = {'序号':1,'姓名':'shaoji','技能':'火球'}
b = a.clear()
print(b)
结果:
None
字典的遍历
遍历的规则:
for i(变量) in 序列(遍历的规则):
循环体
- 通过key来遍历
方法:dict.keys()
例如:
a = {'序号':1,'姓名':'shaoji','技能':'火球'}
for i in a.keys():
print(a[i])
结果:
1
shaoji
火球
- 通过value来遍历
方法:dict.values()
例如:
a = {'序号':1,'姓名':'shaoji','技能':'火球'}
for i, v in a.items():
print(i, ':', v)
结果:
序号:1
姓名:shaoji
技能:火球
拷贝
做拷贝的对象必须是可变类型,例如列表,字典
浅拷贝
浅拷贝主要拷贝的是对象的引用值,当改变对象的值,另一个对象的值也会发生变化。
浅拷贝是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的对象”复制进去,所以原始对象和新对象引用同一对象,新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。
import copy
a = {'1': 1, '2': 2}
b = {'1': 1, '2': 2}
print(id(a), id(b))
运行结果 》》》1588506094688 1588506094760
深拷贝
深拷贝主要是将另一个对象的属性值拷贝过来之后,另一个对象的属性值并不受到影响,因为此时它自己在堆中开辟了自己的内存区域,不受外界干扰。
深拷贝是在引用方面不同,深拷贝就是创建一个新的和原始字段的内容相同的字段,是两个一样大的数据段,所以两者的引用是不同的,之后的新对象中的引用型字段发生改变,不会引起原始对象中的字段发生改变。
深拷贝可以对所有的数据全部进行拷贝,形成一个新的id
例如:
import copy
a = {'1': 1, '2': 2, 'list1': [1, 2, 3, {'name': [12, 23]}]}
b = copy.deepcopy(dict1)
print(id(dict1), id(dict3))
结果:
1588508590368 1588508590944
作业
-
a = {'name':'123','data':{'result':[{'src':'python1'},{'src':'python2'},{'src':'python3'}]}}
找到python1/python2/python3
-
有如下值列表[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。