这是我参与11月更文挑战的7天,活动详情查看:2021最后一次更文挑战。
tuple
tuple元组也是序列结构,但是是一种不可变序列,可以简单的理解为内容不可变的列表。除了在内部元素不可修改的区别外,元组和列表的用法差不多:
>>> tu = ()
>>> tu
()
>>> tu1 = tuple()
>>> tu1
()
>>> type(tu)
<class 'tuple'>
>>> type(tu1)
<class 'tuple'>
元组中不允许的操作
不允许修改、新增元素
>>> tup = (1,2,3)
>>> tup[2] = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
一旦想改变该元组,只能重新开辟一块内存,创建新的元组:
>>> tup = (1,2,3)
>>> new_tup = tup+(4,)
>>> new_tup
(1, 2, 3, 4)
⚠️注意:元组只保证它的一级子元素不可变,对于嵌套的元素内部,不保证不可变,如下:
>>> tup = (1,2,3,['cat',5]) # 将'cat'改为4
>>> tup[3][0] = 4
>>> tup
(1, 2, 3, [4, 5])
>>> tup1 = (1,2,3,('cat',5)) # 将'cat'改为4
>>> tup1[3][0] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
不允许删除某个元素(但可以删除整个元组)
实际上,所有会对元组内部元素发生修改动作的方法。例如,元组没有remove,append,pop等方法。
列表和元组的转换
- 元组转为列表:
>>> tu = (1,2,3)
>>> list(tu)
[1, 2, 3]
- 列表转为元组:
>>> li = [1,2,3]
>>> tuple(li)
(1, 2, 3)
字典
Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值的类型也可以是其它任何数据类型。
字典的key必须是不可变的对象,例如:
- 整数
- 字符串
- bytes
- 元组
使用最多的还是
字符串。
⚠️注意:列表、字典、集合等就不可以作为key。同时,同一个字典内的key必须是唯一的,但值则不必。
字典可精确描述为不定长、可变、无序、散列的集合类型。
创建字典
>>> dic1 = {'name':'cat','age':'18'}
>>> type(dic1)
<class 'dict'>
>>> dic2 = dict(name="cat",age='18')
>>> type(dic2)
<class 'dict'>
>>> dic3 = dict([('name','cat'),('age','18')])
>>> type(dic3)
<class 'dict'>
>>> dic1 == dic2 == dic3 # ==比较数值
True
删除字典元素、清空字典和删除字典:
>>> dic1
{'name': 'cat', 'age': 18, 'gender': 'male'}
>>> del dic1['name'] # 删除某key:value元素
>>> dic1
{'age': 18, 'gender': 'male'}
>>> dic1
{'age': 18, 'gender': 'male'}
>>> dic1.clear() # 清空字典
>>> dic1
{}
>>> del dic1 # 删除整个字典
>>> dic1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dic1' is not defined
字典的方法
get(key):返回指定键的值,如果值不在字典中,则返回default值。items():以列表返回可遍历的(键, 值) 元组对。keys():以列表返回字典所有的键。values():以列表返回字典所有的值。
>>> dic1 = {'name':'cat','age':18}
>>> dic1.get('name')
'cat'
>>> dic1.get('gender') # 当key:value不存在时,返回None
>>> dic1.items()
dict_items([('name', 'cat'), ('age', 18)])
>>> for k,v in dic1.items():
... print(k,v)
...
name cat
age 18
>>> dic1.keys()
dict_keys(['name', 'age'])
>>> dic1.values()
dict_values(['cat', 18])