此文介绍并详细介绍了python的列表,元组,和字典 的定义和详细用法,绝对干货
列表
列表的定义:
- List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组
- 列表用 [] 定义,数据 之间使用 , 分隔
- 列表中的项目 可以改变
- 列表的 索引 从 0 开始
- 索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标
注意:从列表中取值时,如果 超出索引范围,程序会报错
演示:
# 定义一个列表alist,一个列表中可以由字符串,可以有整数,也可以有子列表
>>> alist = [10, 20, 'tom','alice', [1,2]]
>>> len(alist) # 使用函数len(),可以查看列表的长度,即以逗号分割的元素的多少
5
# 列表也是以下标取元素,默认开始下标为0,取出列表alist中的第一个元素,为10
>>> alist[0]
10
>>> alist[-1] # 取出列表alist中,倒数第一个元素,为子列表[1,2]
[1, 2]
>>> alist[2:4] # 取出列表alist中,第二个到第四个元素,下标为4的元素不包含
['tom', 'alice']
>>> 'tom' in alist # 字符串'tom'是否在列表alist范围之内
True
# 列表的拼接和重新赋值
>>> alist # 查看列表alist中的值
>>> type(alist) # 查看列表alist的数据类型,为list类型
<class 'list'>
>>> type(100) # 查看100的数据类型,为int类型
<class 'int'>
>>> alist + 100 # 列表在拼接时,必须是相同类型【均为list类型】,才可以完成拼接
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> alist + [100] # 完成拼接,只是输出拼接后的结果,不会改变列表alist的组成
>>> alist[-1] # 查看列表alist最后一个元素的值
[1,2]
>>> alist[-1] = 100 # 修改列表alist最后一个元素的值为100
>>> alist[-1] # 查看列表alist最后一个元素的值,验证结果
100
>>> alist # 查看列表alist中的所有元素
列表操作:
• 使用 in 或 not in 判断成员关系
• 使用 append 方法向列表中追加元素(常用)
>>> 10 in alist # 判断10, 是否在列表alist范围之内,为真
True
>>> 'alice' not in alist # 判断alice, 是否不在列表alist范围之内,为假
False
>>> 'tom' not in alist # 判断字符串tom, 是否不在列表alist范围之内,为假
False
# alist.<Tab><Tab>可以显示alist可以使用的方法
>>> alist.append(200) # 向列表alist中,追加一个元素200
>>> alist
元组
元组的定义:
- Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改
- 元组 表示多个元素组成的序列
- 元组 在 Python 开发中,有特定的应用场景
- 用于存储 一串 信息,数据 之间使用 , 分隔
- 元组用 () 定义
- 元组的 索引 从 0 开始
- 索引 就是数据在 元组 中的位置编号
- 元组中 只包含一个元素 时,需要 在元素后面添加逗号
- 类似于成绩排名,不可修改
演示:
>>> atuple = (1,2,'tom','alice') # 定义一个元组atuple
>>> len(atuple) # 使用函数len() 统计计算元组的长度,即元素的多少
4
>>> atuple[2:] # 取出元组atuple中,下标为2及其以后的元素,初始下标也是 0
>>> atuple + (100,200) # 元组拼接,元组本身不会发生变化
>>> 'tom' in atuple # 字符串tom是否在元组atuple中,为真
# 元组是静态列表,一旦定义则不可被修改,元组中的元素不能重新赋值
>>> atuple[0] = 10
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
字典
字典的定义:
python中的数据类型是dictonart
- dictionary(字典) 是 除列表以外 Python 之中 最灵活 的数据类型
- 字典同样可以用来 存储多个数据
- 通常用于存储 描述一个 物体 的相关信息
- 和列表的区别
- 列表 是 有序 的对象集合
- 字典 是 无序 的对象集合
- 字典用 {} 定义
- 字典使用 键值对 存储数据,键值对之间使用 , 分隔
- 键 key 是索引
- 值 value 是数据
- 键 和 值 之间使用 : 分隔
- 键必须是唯一的
- 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
演示:
>>> adict = {'zhang': 123, 'san': 246} # 定义一个字典变量adict
>>> adict # 查看字典adict中的所有元素
{'zhang': 123, 'san': 246}
# 只能判断键,是否在字典adict范围内,不能判断值
>>> 'zhang' in adict # 键zhang,在字典adict范围内
True
>>> adict['san'] #取出键san对应的页码,为246
246
>>> adict['san'] = 247 # 如果键san已经在字典中存在,则修改san对应的页码为247
>>> adict['san']
22
>>> adict['zhao'] = 400 # 如果键zhao在字典中不存在,则表示在字典中新增
>>> adict #查看字典adict中的所有元素,新增键email
{'zhang': 123, 'san': 247, 'zhao': 400}
# 字典是通过键,来取出对应的值,不能用下标取值,因为字典是没有顺序的
>>> adict[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 0
数据类型比较
按存储模型分类:
- 标量类型:数值、字符串
- 容器类型:列表、元组、字典
按更新模型分类:
- 可变类型:列表、字典
- 不可变类型:数字、字符串、元组
演示 1 # 数据存储方式:演示一 >>> py_str = 'python' # 定义变量py_str, 值为'python' >>> py_str[0] # 可以查看变量py_str下标为0的字符 'p' >>> py_str[0] = 'P' # 修改变量py_str下标为0的字符时,不支持,无法修改 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment >>> py_str = 'Python' # 给变量py_str 整体赋值时,赋值成功,
总结:
- 定义变量时,系统会在内存中开辟一个固定长度的空间,用于存储变量的值 'python',py_str 是这个空间的映射,这是一个整体,无法修改变量中的单个字符;
- 重新变量 py_str 赋值时,系统会在内存中重新开辟一个固定长度的空间,存储新的值 'Python',系统会将 py_str 映射指向新的空间,而不是在原来的基础上进行修改;
演示 2
>>> alist = [100,20,30] # 定义列表alist, 值为[100,20,30]
>>> blist = alist # 将列表alist赋值给blist
>>> blist # 查看列表blist中的所有元素
>>> blist.append(200) # 向列表blist中追加一个元素
>>> blist # 查看列表blist中的所有元素
[100, 20, 30, 200]
# 查看列表alist中的所有元素,发现并没有给alist赋值,而alist的值也发生变化,原因如下图所示:
>>> alist
[100, 20, 30, 200]
总结:
- 当我们执行 blist = alist 时,实际上是让 alist 和 blist 同时指向了一个数据存储空间;
- 当修改 blist 时,数据存储空间被修改了,而 alist 也指向同一个数据存储空间,所有 alist 的值也发生改变;
# 通过id() 验证 alist 和 blist 同时指向同一个存储空间
>>> id(alist)
140320705670024
>>> id(blist)
140320705670024
演示 3
# 创建列表clist, 修改列表clist时,列表alist的值不会发生改变
>>> clist = alist[:] # 重新定义一个列表,使用切片方式,将alist的值赋值给clist
>>> id(clist) # 查看clist和alist的id值,不相同,它们指向不同的存储空间
140320705692680
>>> id(alist)
140320705670024
>>> clist.append(50) # 向列表clist后追加一个元素
# 查看列表clist和列表alist,值不相同,原理如下图所示:
>>> clist
[100, 20, 30, 200, 50]
>>> alist
[100, 20, 30, 200]
总结:
- 当我们执行 clist = alist[:] 时,实际上是重新开辟了一个新数据存储空间,存储 alist 中的数据,然后让 clist 指向新的存储空间;
- 所以列表 clist 的修改不会影响列表 alist 中的值;
按访问模型分类:
- 直接访问:数字
- 顺序访问:字符串、列表、元组
- 映射访问:字典