初始Python篇(3)—— 列表

ops/2024/11/15 7:08:58/

 找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程(ಥ_ಥ)-CSDN博客

所属专栏: Python

目录

列表相关概念 

列表的创建与删除

列表的遍历

操作列表的相关方法 

列表的排序 

列表生成式

二维列表 

创建二维列表

遍历二维列表

列表生成式


列表相关概念 

定义:是指一系列的按特定顺序排列的元素组成。是Python中内置的可变序列,与我们前面学习的字符串不同,字符串是不可变序列,但是两者都是属于序列的,因此操作序列的方法和操作符都是可以用来操作列表的。

在Python中使用 [ ] 定义列表,元素与元素之间使用英文的逗号分隔,列表中的元素可以是任意的数据类型(包括列表本身)。

列表的创建与删除

列表有两种创建方式:1、使用 [ ] 直接创建列表;2、使用内置函数 list() 创建列表。

python"># 列表的创建
# 方式一:使用 []
list1 = [1,2,3,'Hello','World'] # 其中的元素可以是不同的类型
# 方式二:使用内置函数list()
list2 = list('Hello')print(list1) # 输出为 [1, 2, 3, 'Hello', 'World']
print(list2) # 输出为 ['H', 'e', 'l', 'l', 'o']

注意:当我们使用 [ ] 去创建列表时,用 逗号 分隔的才是元素;而我们去使用内置函数 list() 去创建列表时,其参数只能是 可迭代对象类型(不传参的话,就是空列表)。在 Python 中,可迭代对象类型是指可以一次返回一个元素的对象。可迭代对象实现了__iter__()方法,这个方法返回一个迭代器对象。 目前,我们学习的可迭代数据类型只有字符串和列表。如果想要列表中的元素是 int 等基本数据类型的话,只能通过 range 方法来实现。

python">for i in range(1, 10, 2): # 起始位置为1,结束位置为9,步长为2print(i, end=' ') # 1 3 5 7 9

删除列表:通过 del 关键字来删除。

python">del  列表名

列表名对应的列表被删除了之后,就不能再使用该列表了。 

前面说了列表也属于序列的一种,即序列的相关操作列表也是可以用的。演示一下,切片操作:

python"># 从1开始,到2结束,步长默认为1
print(list2[1:3]) # 输出 ['e', 'l']

注意:切片操作只是在原来大范围的数据,进行一定的复制,变成了小范围的数据,但是其数据类型并未发生变化。

列表的遍历

总共有三种常见的遍历方式:

1、使用for循环:

python">list = list('Hello')
for i in list: # 将列表中的元素赋值给 i print(i,end=' ') # 输出 H e l l o 

2、使用for循环+range索引:

python">list = list('Hello')
for i in range(0, len(list)):print(list[i],end=' ') # 输出 H e l l o

3、使用 enumerate 函数:

语法结构:

python">for index, item in enumerate(list):print(index, item)# index 是序号,不是索引。序号可以手动设置起始位置,索引是不变的
# item 是列表的元素
python">list = list('Hello')
for index,item in enumerate(list):print(index, item) 
# 输出 0 H
#     1 e
#     2 l
#     3 l
#     4 o

我们还可以手动地去修改序号的起始位置:

python">list = list('Hello')
for index,item in enumerate(list, start=2): # "start=" 也是可以省略的print(index, item)
# 输出 2 H
#     3 e
#     4 l
#     5 l
#     6 o

操作列表的相关方法 

我们知道了列表是属于可变的数据类型,那么其就支持增删改查的操作。

列表的方法描述说明
Iist.append(x)在列表最后增加一个元素
Iist.insert(index,x)在列表中第index位置增加一个元素
Iist.clear()清除列表中所有元素
Iist.pop(index)将列表中第index位置的元素取出,并从列表中将其删除
Iist.remove(x)将列表中出现的第一个元素x删除
Iist.reverse(x)将列表中的元素反转
Iist.copy()拷贝列表中的所元素,生成一个新的列表

方法演示: 

python">list = ['Hello', 'World']
print(list) # 输出为 ['Hello', 'World']
# 增加元素
list.append('Python')
print(list) # 输出为 ['Hello', 'World', 'Python']# 在列表的1位置插入元素
list.insert(1,'Java')
print(list) # 输出为 ['Hello', 'Java', 'World', 'Python']# 将列表中第1个元素取出,并删除
pop = list.pop(1)
print(pop) # 输出为 Java
print(list) # 输出为 ['Hello', 'World', 'Python']# 将列表中出现的第一个"World"删除
remove = list.remove('World')
print(remove) # 输出为 None --> 这里可以看出和pop方法的区别了
print(list) # 输出为 ['Hello', 'Python']#  将列表的元素进行反转
list.reverse()
print(list) # 输出为 ['Python', 'Hello'] --> 是对元素位置反转,而不会对元素进行内部修改# 拷贝原列表
copy_list = list.copy()
print(copy_list) # 输出为 ['Python', 'Hello']# 清空列表
list.clear()
print(list) # 输出为 [] --> 空列表

利用上面的方法进行修改对应位置的元素,只能是先插入一个新的元素,再删除一个旧元素或者反过来做。在列表中访问一个元素的方法是通过 [ ] 来访问的。

python">list = ['Hello', 'World']
print(list) # 输出为 ['Hello', 'World']
list[1] = 'Python'
print(list) # 输出为 ['Hello', 'Python']

列表的排序 

我们可以对列表中的元素进行排序。

语法:

python"># 方式一:通过sort方法
list.sort(key=None, reverse=False)# key 表示的要排序的规则,None表示是默认的规则
# None在Python中和C语言中的NULL含义是差不多的,但是None也是一个对象
# reverse=False 表示默认按照升序的规则排序,如果设置为True的话,就是降序# 方式二:通过内置的sorted函数
sorted(iterable, key=None, reverse=False)# iterable 表示的是要排序的对象,这个对象是可迭代的对象
# 剩下的两个和上面的含义是一样

对于 整数、浮点数这些,排序的规则默认是 根据数字的大小进行比较;对于 英文单词 是通过ASCII码值大小进行比较的。而汉字的比较是 按照 字符的编码值进行比较的。例如,在Unicode编码中,汉字按照一定的编码顺序排列,排序时会依次比较每个字符的编码值大小。这里了解即可。

代码实现:

python"># 对数字进行排序
list = [1,100,2,200]
print('排序前:',list) # 输出为 排序前: [1, 100, 2, 200]
list.sort() # 默认的规则,默认是升序
print('排序后:',list) # 输出为 排序后: [1, 2, 100, 200]# 对英文单词进行排序
list = ['Hello', 'World', 'java', 'mysql','OS']
print('排序前:',list) # 输出为 排序前: ['Hello', 'World', 'java', 'mysql', 'OS']
list.sort() # 默认的规则,默认是升序
print('排序后:',list) # 排序后: ['Hello', 'OS', 'World', 'java', 'mysql']# 对汉字进行排序
list = ['我','要','学','编','程']
print('排序前:',list) # 输出为 排序前: ['我', '要', '学', '编', '程']
list.sort() # 默认的规则,默认是升序
print('排序后:',list) # 排序后: ['学', '我', '程', '编', '要']# 对三者进行混合排序
list = ['编','程','python','Java',100,3]
print('排序前:',list) # 输出为 排序前: ['我', '要', '学', '编', '程']
list.sort() # 因为这里同时存在整数类型和字符串类型的元素,无法进行比较排序,所以会报错
print('排序后:',list)

注意:在ASCII码中,大写的英文字母比与之对应的小写的英文字母小上32。 

我们可以将排序规则进行修改。例如,在比较排序英文单词时,可以先将英文单词全部转换为大写或者小写,这样就可以实现忽略大小的比较了。

代码实现:

# 忽略大小写比较排序
list = ['Hello', 'World', 'java', 'mysql','OS']
print('排序前:',list) # 输出为 排序前: ['Hello', 'World', 'java', 'mysql', 'OS']list.sort(key=str.lower) # 忽略大小写比较,默认是升序
print('排序后:',list) # 输出为 排序后:['Hello', 'java', 'mysql', 'OS', 'World']list.sort(key=str.upper,reverse=True) # 忽略大小写比较,降序排序
print('排序后:',list) # 输出为 排序后:['World', 'OS', 'mysql', 'java', 'Hello']

 注意:这里忽略大小写比较,既可以是按照大写,也可以按照小写的规则来。

上面就是方式一的排序演示,下面我们来看方式二。

python">list = [1,100,2,200]
asc_list = sorted(list) # 默认的排序规则,默认是升序
print('原列表:',list) # 输出为 原列表: [1, 100, 2, 200]
print('新列表:',asc_list) # 输出为 新列表: [1, 2, 100, 200]

注意:sorted函数是在新列表的基础上进行排序的,而原列表是不会被修改的。其余的与上述第一种排序方式是一样的,这里我们就不再进行演示了。

列表生成式

前面的创建的列表,我们都是通过手动的方式写填充元素的。 而现在我们可以通过列表生成式往列表中填充元素。

语法:

python"># 方式一:
list = [item for item in range(a,b)]
# 列表中的元素就是item# 方式二:
list = [item for item in range(a,b) if condition]
# 列表中的元素依然是item,但是其必须满足if语句中的条件 

 代码实现:

python"># 列表生成式
list = [item for item in range(1,11)] # 列表中是[1,10]的元素
print(list) # 输出为 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 列表中是[1,9]之间,偶数的乘积 
list = [item*item for item in range(1,10) if item % 2 == 0] 
print(list) # 输出为 [4, 16, 36, 64]

 我们还可以使用列表生成式来生成 [1,100] 之间的随机数。

python">list = [random.randint(1,100) for i in range(10)] # 只是循环10次而已
print(list)

并且当for循环中的变量没有用到时,这个变量是可以写成 "_" 的。 

二维列表 

上面的列表都是一维列表,和我们在C语言中学习的数组一样,列表也是可以有很多维的。

创建二维列表

创建二维列表,其实就是在一个一维列表里面,嵌套了很多个一维列表。即二维列表中的元素是一维列表。

语法:

python">list = [[],[]......[]
]

 代码实现:

python"># 二维列表
list = [['name', 'age', 'gender'],['张三', 19, '男'],['小玉', 20, '女'],['老爹', 58, '男']
]
print(list)

遍历二维列表

遍历二维列表的话,我们是要用双层for循环的。

python"># 遍历二维列表
list = [['姓名','年龄','性别'],['张三', 19, '男'],['小玉', 20, '女'],['老爹', 58, '男']
]
# 第一种遍历方式
for row in range(0,len(list)):for col in range(0, len(list[row])):print(list[row][col],end='  ')print()# 第二种遍历方式
for row in list:for col in row:print(col,end='  ')print()

第一种遍历方式,就类似于C语言中的遍历数组的方式:使用下标来遍历。而第二种遍历方式更适合于Python的遍历方式。 

列表生成式

语法:

python"># 循环x次,每次都生成一个列表,其内的元素是[a,b)
list = [[i for i in range(a,b)] for in range(x)]

代码实现:

# 列表生成式:生成二维列表
list = [[i for i in range(1,6)] for _ in range(3)]
for row in list:for col in row:print(col,end='\t')print()

这个代码可以这样解读:因为二维列表中的元素是一维列表,因此我们可以直接循环3次,每次都生成一个一维列表,再在一维列表中使用列表生成式,创建一维列表即可。

好啦!本期 初始Python篇(3)—— 列表 的学习之旅就到此结束啦!我们下一期再一起学习吧!


http://www.ppmy.cn/ops/125977.html

相关文章

文字识别解决方案-OCR识别应用场景解析

光学字符识别(Optical Character Recognition, OCR)技术是一种将图像中的文字转换为可编辑和可搜索的数据的技术。随着人工智能和机器学习的发展,OCR技术的应用场景越来越广泛,为文字录入场景带来了革命性的变革,下面以…

Ubuntu22.04中安装英伟达驱动并部署Pytorch深度学习环境

安装英伟达驱动 本文基于windows10ubuntu22.04双系统,给ubuntu22.04安装英伟达驱动。 安装必要。依赖 sudo apt update # 获取最新的软件包信息 sudo apt upgrade # 升级软件包 sudo apt install g sudo apt install gcc sudo apt install make禁用ubuntu默认驱动…

【LeetCode算法笔记】Day1:动态规划基础

目录 动态规划简介动态规划的定义动态规划的核心思想动态规划的简单例子 动态规划特征最优子结构性质重复子问题性质无后效应 动态规划的基本思路 动态规划简介 动态规划的定义 简称DP,是一种求解多阶段决策过程最优化问题的方法。在动态规划中,通过把原问题分解为…

小帅和小美有容-UMLChina建模知识竞赛第5赛季第16轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题,即可获得本轮优胜。 如果有第4题,第4题为附加题&am…

问:JVM当中的垃圾分类怎么搞?

在Java中,JVM(Java虚拟机)的垃圾识别与分类是自动内存管理的重要组成部分。这一过程主要通过垃圾收集器(Garbage Collector)实现,旨在识别和回收不再被程序引用的对象,以释放内存空间。 1. 垃圾…

QT实现校园导航

导航是地图类项目实战中经常会遇到了。看上去貌似没头绪&#xff0c;其实是有模板遵循的。我们直接根据图看代码。 //MainWidget.h#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include "mapwidget.h" #include <QToolButton> #in…

JavaScript基础入门

目录 1. JavaScript简介 2. 基本语法 2.1 变量声明 2.2 数据类型 2.3 运算符 3. 控制结构 3.1 条件语句 3.2 循环语句 4. 函数 5. 数组与对象 5.1 数组 5.2 对象 6. DOM 操作 总结 JavaScript 是当今最流行的编程语言之一&#xff0c;它主要用于网页开发&#xf…

[Windows]文件搜索利器Everything(附zip)

前言 写代码过程中&#xff0c;老大突然发一条信息 老大&#xff1a;这周周报发一下。 我&#xff1a;好的。 然后我就 显示桌面打开-我的电脑找到E盘&#xff0c;找到周报文件夹寻找到所有周报中今天的周报复制发送 当我用上Everything之后 打开&#xff0c;输入周报copy发…