4.背上我的行囊
有关列表,字典,元组,集合,字符串;我把它们归到了 4.背上我的行囊 我们可以把它们理解成存储数据的容器,它们类似我们行囊的功能,都是具备存储的功能,如果你学过 C/C++,你可以把它们理解成数组,我们在之前的学习中知道,如果我们连续的去给一个变量不断的进行赋值操作,那么最终结果就是我们变量的值被不断的覆盖(只存储最后一次赋值的结果),如果它们每次赋值的结果我们都想进行存储的话,那么我们当然可以设多个变量每次存储,我们也可以借助列表这些容器去实现存储它们.
4.1 列表
🚩列表是包涵若干元素的 有序连续 内存空间,其中元素被放在 [] 中,每个元素之间用 , 进行隔开,每个元素可以是不同的类型:它既可以是整数,浮点数,字符串,亦可以是我们后续会讲到的:列表,元组,字典,集合甚至函数以及其他对象;在这里你不需要理解这么多,你简单直接的理解成:列表中的元素可以是各种各样的类型即可,下述的列表都是合法的:
[1, 2, 3, 4, 5] [0.3, 2, 2.1, 3.7] ['hello', 'world', 2, 3.14, 666]
4.1.1 列表的创建,删除与遍历
🚩列表的创建:我们可以直接使用赋值运算符 “=”,直接把一个列表常量(用[]
表示列表,列表的元素之间用,
隔开)赋值给变量,如果我们想建立一个列表但是不给它赋任何的值,我们直接让变量 “=” 一个空列表([]
),即:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:02 # 欢迎大家关注AIoT相关博客~ a = ['hello', 'world', 2, 3.14, 666] b = [] # 建立一个空列表 print(a) print(b)
我们还可以调用 list() 函数进行列表的创建,具体操作如下所示:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:02 # 欢迎大家关注AIoT相关博客~ a = list(['hello', 'world', 2, 3.14, 666]) b = list() # 建立一个空列表 print(a) print(b)
当然,你可能觉得 list() 函数很没用嘛,写起来还多,但是 list() 函数最主要的功能就是它可以把元组,字符串,字典,集合,range() 等转成列表,我们下面只介绍把字符串和 range() 转为列表,其余等读者学完相应内容之后自行实验:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:02 # 欢迎大家关注AIoT相关博客~ a = list('hello world') b = list(range(10)) print(a) print(b)
🚩当一个列表不再使用的时候,我们可以使用 del 把它删除:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:02 # 欢迎大家关注AIoT相关博客~ a = list('hello world') del a print(a)
出现:NameError: name ‘a’ is not defined,意思是名称错误:a 未被定义,并不是它未被定义,而是因为我们用 del 操作把它删除了
🚩列表的遍历语法格式如下:
for 迭代变量 in 列表名: 操作语句
比如我们建立一个列表,并打印所有的列表元素可以如下述代码所示:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:02 # 欢迎大家关注AIoT相关博客~ a = list(range(10)) for item in a: print(item, end = ' ')
4.1.2 列表元素的查询
🚩对于一个我们已经创建好的列表,我们如何去快速的访问列表中的元素呢?这里我们介绍一个新的知识:索引,如果你学过 C/C++,你可以把索引理解成数组的下标,但是又略有不同:
如上图所示,其中红色的数字和蓝色的数字对应的就是该列表的索引(蓝色的数字和红色的数字对应的列表位置是一一对应相匹配的),下面我们用代码去演示:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:44 # 欢迎大家关注AIoT相关博客~ a = list(['hello', 'world', 2, 3.14, 666]) print(a[0], a[-5], a[4], a[-1])
index() 方法用来返回指定元素在列表中 首次 出现的位置(索引),如果列表中不存在该元素则会显示 ValueError:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:44 # 欢迎大家关注AIoT相关博客~ a = list(['hello', 'world', 2, 3.14, 666]) print(a.index(3.14)) print(a.index(4))
可以看出,列表 a 中存在元素 3.14,返回了它的索引 3,列表 a 中不存在元素 4,显示:ValueError
对于列表中的元素查询,我们还可以使用 in 和 not in,返回值为 True 或 False,True 代表在列表中存在你查找的值,False 则代表不存在,代码如下:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 10:44 # 欢迎大家关注AIoT相关博客~ a = list(['hello', 'world', 2, 3.14, 666]) print('hello' in a) print('2' not in a) # 注意这里是字符串 '2',并非数字 2
4.1.3 列表元素的增删改
🚩首先介绍一个 特别重要 的操作:切片,切片的语法格式为:
列表名[start : stop : step]
切片的结果是对原列表序列的拷贝,切片的范围是 [start, stop)【左闭右开】,虽然参数列表为三个:start,stop,step,但是和 range() 一样,我们可以只传入其中的一个或者两个,其余有如下默认值:
[start:stop] # step 默认为1 # step 为正数,从 start 开始往后切片 [:stop:step] # 切片的第一个元素默认为列表第一个元素 [start::step] # 切片的最后一个元素默认为列表最后一个元素 # step 为负数,从 start 开始往前切片 [:stop:step] # 切片的第一个元素默认为列表最后一个元素 [start::step] # 切片的最后一个元素默认为列表第一个元素
说白了,step的作用就是决定是正向切片还是反向切片,step为负代表为反向切片,反之如果step为正,那么就代表正向切片,切片的步长为 step 绝对值的大小
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 11:19 # 欢迎大家关注AIoT相关博客~ a = list([1, 2, 3, 4, 5, 6]) print(a[:: 2]) # 从下标0开始隔一个取一个 print(a[:: -1]) # 反向切片,其实就是让列表反转
我们除了可以通过切片获取列表中的值,还可以利用切片增加,替换或修改,删除列表元素,下面依次去介绍
1️⃣ 增加元素:可以使用切片操作在列表的任意位置插入元素,这里我们会使用len() 函数,读者只需知道 len(L) 可以返回列表 L 的长度即可,具体操作用代码的形式给出:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/9 11:19 # 欢迎大家关注AIoT相关博客~ a = list(range(10)) print(a) # 在列表头部(索引为0)的位置上插入一段 [10, 11, 12] 的列表 a[:0] = [10, 11, 12] # 可以理解为在0的位置之前插入了[10, 11, 12] print(a) # 在索引为6的位置上插入一个元素 13 a[6:6] = [13] print(a) # 在列表的末尾插入一段 [-1, -2, -3] 的列表 a[len(a):] = [-1, -2, -3] print(a)
我们还可以通过以下方法给我们的列表添加元素:
方法 | 介绍 |
append(x) | 在列表尾追加一个元素x |
extend(L) | 将列表L中所有的元素追加至列表尾 |
insert(index, x) | 在列表的index位置插入一个元素x |
下面我们通过代码去演示上述函数的用法:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/11 12:26 # 欢迎大家关注AIoT相关博客~ # 创建一个 [1, 3, 5, 7, 9] 的列表 a = list(range(1, 10, 2)) print(a) # 将 100 追加至列表a尾 a.append(100) print(a) # 将 [2, 4, 6, 8] 追加至列表a尾 a.extend(list(range(2, 10, 2))) print(a) # 在 index = 3 的地方插入一个元素 '这是index为3的位置' a.insert(3, '这是index为3的位置') print(a)
2️⃣ 删除元素:和增加元素一样,我们在删除列表中的元素的时候同样有切片和调用函数(方法)两种方法,我们的相关函数如下:
函数(方法) | 介绍 |
remove(x) | 删除第一个值为x的元素,如果不存在值为x的元素则会抛出ValueError |
pop(index) | 删除并返回列表中索引为index的元素,index默认为-1(最后一个元素) |
clear(L) | 清空列表L |
下面关于切片以及相关函数的操作我们利用代码进行讲解:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/11 13:34 # 欢迎大家关注AIoT相关博客~ a = list(range(10)) print(a) # 利用切片删除元素 a[:3] = [] # 删除列表的前三项 print(a) a[:] = [] # 删除列表的所有元素(清空列表) print(a) del a print('------------------------') a = list(range(10)) print(a) # remove()函数: a.remove(5) # 看列表中是否有元素5,有则删除,没有抛出ValueError print(a) # pop()函数: a.pop(4) # 删除索引为4的元素(第5个元素) a.pop() # 默认索引为-1(最后一个元素) print(a) # clear()函数: a.clear() # 清空列表中的所有元素 print(a) ''' 注意辨析 clear()和del del是删除列表,clear()是清空列表中的元素 del a 操作的结果为列表a不存在 clear(a) 操作的结果为列表a中的元素都消失 '''
3️⃣ 修改元素:我们修改元素有两种方法:切片以及为指定索引赋值,下面我们用代码去演示:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/11 14:03 # 欢迎大家关注AIoT相关博客~ a = list(range(10)) print(a) # 切片 # 如删除原列表的前三个元素[0, 1, 2],并修改为[10, 11] a[:3] = [10, 11] print(a) # 切片连续(step == 1)不要求等号两边列表长度相等 # 切片不连续(step != 1)要求等号两边列表长度相等 ''' 运行会报错: a[::2] = [2] # 因为切片不连续,故必须要求等号两边列表长度相等 print(a) ''' # 隔一个改一个(切片不连续,必须要求等号两边列表长度相等) a[::2] = ['a', 'b', 'c', 'd', 'e'] print(a) del a print('---------------------------') # 利用索引去修改: a = list(range(0,10,2)) a[3] = '这是索引为3的点' print(a)