《人生苦短,我学Python》——列表(List)

昨天,我们学习了一种数据结构------元组。今天我们将学习另一种数据结构------列表

列表又叫List,与元组的结构类似,也可以用于存储多个类型的数据。接下来,我们一起学习列表的用法-->



文章目录


一、要点先知:

我们通过下面这段代码来理解列表的相关知识:

py 复制代码
# 定义一个列表:
friendName = ["Kevin", "Tony", "Asum"]

# 输出整个列表:
print(friendName)

# 访问列表的第一个元素:
print(friendName[0])

# 修改列表的第一个元素:
friendName[0] = "Jessica"

# 切片访问列表元素:(下标从0开始)
# 1.切片访问整个列表,冒号两边没有数字
print(friendName[:])

# 2.切片访问从第二个元素开始的所有后续元素
print(friendName[1:])

# 3.切片访问第一个到第三个元素(但不包括第三个),即访问第一个和第二个元素
print(friendName[:2])

# 4.切片访问第2个元素
print(friendName[1:2])

# 5.列表逆序输出:
print(friendName[::-1])

# 向列表中追加元素:
friendName.append(2021)
#print(friendName)

# 向列表中追加列表:
friendName.append(["May", "Anna"])
#print(friendName)

# 使用insert()往列表第一项添加元素"Tony":
friendName.insert(0,"Tony")

# 使用pop()1删除列表中的元素:
# 没有参数时默认删除列表末尾
friendName.pop()

# 删除列表第二个元素(下标从0开始)
friendName.pop(1)
  • friendName:变量名,用来存储这个列表。

  • []:一对中括号,是定义列表的固定格式。

  • ,:逗号,列表内部数据之间使用逗号分隔开。

  • 空格:两个空格,这里的空格不是必须的。但为了代码美观,建议在逗号后面加一个空格。

  • 字符串:三个字符串,是friendName这个列表里面包含的具体数据。

✨如果你已经有了一定的编程基础(比如C,C++,Java等等),相信本文后面的内容将对你作用不大,可以自行跳过,后面的内容主要争对于将python作为第一门编程语言的同学。


二、基础讲解:

1. 存储对象------装什么?

我们知道元组中可以存储多种类型的数据。

列表与元组一样,列表中的数据元素也可以是任何一种类型,如下所示,整型、浮点型、布尔数等。除此之外,也可以是整型,浮点型,字符串或布尔数的任意组合。

py 复制代码
#  元素全是整数的列表
integer=[1,2,3,5,7]
#  元素全是浮点数的列表
floatNumber=[1.5,1.6,1.7,1.8]
#  元素全是字符串的列表
string=['aa','b','c','d']
#  元素全是布尔值的列表
boolList=[True,False,True,False]
# 元素全是列表的列表
listList=[[1,2,3],[4,5,6],[7,8,9]]
#  元素全是元组的列表
tupleList=[(1,2,3),(4,5,6),(7,8,9)]
#  元素全是字典的列表
dictList=[{'name':'Tom','age':18},{'name':'Jerry','age':20}]
#  元素全是集合的列表
setList=[{1,2,3},{4,5,6},{7,8,9}]
#  元素全是range的列表
rangeList=[range(1,10),range(10,20),range(20,30)]
#  元素全是None的列表
noneList=[None,None,None,None]
#  元素是混合类型的列表
mixList=[1,1.5,'aa',False,[1,2,3],(7,8,9),{'name':'Jerry','age':20},{1,2,3},range(1,10),None]

print(integer)
print(floatNumber)
print(string)
print(boolList)
print(listList)
print(tupleList)
print(dictList)
print(setList)
print(rangeList)
print(noneList)
print(mixList)

2. 访问方法------如何访?

(1)取单个元素------索引:

前面我们学过,使用索引能够获取元组中的元素,而列表与元组类似,也可以使用索引。

py 复制代码
#  元素全是整数的列表
integer=[1,2,3,5,7]
#  取出第一个元素
first=integer[0]
#  取出最后一个元素
last=integer[-1]
# 打印元素
print(first,last)
# 修改最后一个元素
integer[-1] = 9
# 打印列表
print(integer)

如上,我们成功地对integer数组进行了取单个元素的操作。

⚠️列表在索引时最容易出现以下 bug:

索引错误

列表中有6个元素,从0开始索引,最大的索引为5或-1

  • 当索引的值超过5以后,就会出现越界并提示:列表索引超出范围(IndexError: list index out of range)

我们知道索引用于取单个元素,如果要提取列表中的多个连续的元素,该怎么操作呢?

接下来,我们先学习切片的概念。


(2)取连续多个元素------切片:

定义:编程中的切片能对元组、列表等有序数据结构进行处理,以截取数据中连续的片段,方便使用。

隐喻:就像从长条面包里面切出某一段面包一样,从一段线性排列的数据中选取某一段数据。

这段代码做的事情是定义了一个叫做"integer"的列表,并对其进行了切片操作:

py 复制代码
#  元素全是整数的列表
integer=[1,2,3,5,7]
#  切出第一个和第二个元素
print(integer[0:2])

[:] 括号中既有数字也有冒号,表明要对列表进行切片;冒号用于分隔切片开始的位置和切片终止的位置。

切片要遵循"左闭右开"原则,就是取左边的数据,不取右边的数据,与数学中的区间类似[0, 2),取左不取右,所以输出[1,2]

⚠️注意:切片与索引类似,也是从0开始,即第一个元素的索引为0。


Python中的切片操作非常灵活,可以通过指定不同的参数来实现不同的切片方式。下面是一些常见的切片操作示例:

常规切片法:

(1.list[start:end]:从索引start开始,到索引end-1结束,以步长为1切片。共有3种情况:

1️⃣开始位置数字不填,默认从第一个元素开始切片。根据"左闭右开"原则,如图,从第一个元素(含)开始,取到第三个元素(含)。

2️⃣结束位置数字不填,默认从开始位置切片,取到最后一个元素。

注意:不填写结束位置的数字时,列表中最后一个元素也会被提取。如图,表示从第二个元素(含)开始,到最后一个元素(含)结束。

3️⃣开始位置和结束位置都不填写时,就是取列表中的所有元素。如图,[:]直接取出所有元素,但这种用法不常见,了解即可。


步长切片法:

(2.list[start:end:step]:从索引start开始,到索引end-1结束,以步长为step切片。

py 复制代码
 integer=[1,2,3,5,7]
#步长为2进行切片
print(integer[0::2])

列表逆序切片法:

(3.list[::-1]:以步长为-1切片,实现列表的逆序。

py 复制代码
integer=[1,2,3,5,7]
#  步长为-1进行逆序
print(integer[::-1])

学习了列表的切片方法后,元组也可以使用切片来截取一段数据,如下所示。

py 复制代码
integer=(1,2,3,5,7)
#  步长为2进行切片
print(integer[::2])
# [0,2)切片
print(integer[:2])
# [1,4)切片
print(integer[1:4])
# 逆序
print(integer[::-1])

3. 修改错误------如何改?

学习了索引和切片访问列表中数据的方式后,如果,某个列表中的数据定义错误了,想要进行修改,该怎样操作呢?

可以直接对相应的元素进行值覆盖!

py 复制代码
friendName = ["Kevin", "Tony", "Asum"]
print(friendName)
print(friendName[0])
# 修改,值覆盖
friendName[0] = "Jessica"
print(friendName)

⚠️列表和元组的异同:

相同点

  1. 可以使用索引定位到某个元素;
  2. 可以使用切片取一个片段;
  3. 可以存储不同的数据,如,字符串、整型、浮点型、布尔数等。

不同点:元组的内容定义完成后,里面的内容就不能再修改了!(元组具有不可变的特性)

由于,元组是不可修改的,强行修改会出现以下 bug:

类型错误:

当对元组进行修改时,就会提示元组类型数据更改(TypeError: 'tuple' object does not support item assignment)。


4. 追加元素------append():

想象一下在食堂排队打饭,你会自动排在队伍的最后方。

此时排的队列就像是一个列表,自动排在最后方的行为,可以类比为一次对这个列表的"追加"。

定义:追加一般用于描述在列表的末尾添加元素的行为。

当我们想在列表的尾部追加一个元素的时候,可以在列表名后使用 append() 语句。

py 复制代码
integer=(1,2,3,5,7)
#  在列表中添加元素9
integer.append(9)
#  继续在列表中添加元素11
integer.append(11)

print(integer)

句点:一个句点,表明将会使用列表的某个内置功能。

  • 这是一个固定的搭配格式,只能使用英文句号,不能替换成其他符号。

append:类似print,表明我们要在这个列表的尾部添加新的元素。

( ):一对英文括号,这是 append 功能的固定格式。括号内是具体要添加到列表末尾的元素。

  • 使用 append() 可以追加不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。

5. 插入元素------insert():

在 Python 中,可以使用 insert() 语句来执行插入元素的操作。

py 复制代码
integer=[1,2,3,5,7]
#  在列表中添加元素9
integer.insert(1,9)
#  继续在列表中添加元素11
integer.insert(3,11)

print(integer)

句点:句点,表明将会使用列表的某个内置功能。

insert:类似print。表明我们要在这个列表的某个位置插入新的元素。

( ):一对括号,这是insert功能的固定格式。括号内是插入的元素位置以及要插入的元素。

索引:第一个数字位置表示索引,也就是这个元素要插入到列表中的位置。索引是从 0 开始。

逗号:一个逗号,用来分隔插入的位置以及插入的具体数据。

插入元素:插入的元素可以是不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。

  • 插入元素以后,排在此元素之后的原有元素自动后移一位。

列表插入元素的场景在生活中很常见,例如游戏排行榜。

游戏玩家得分如果能上榜排行,系统就会把玩家的分数插入排行榜中。

插入玩家名称和分数后,排在之后的玩家自动后移一位。


6. 删除元素------pop():

如果列表中存在我们不需要的元素,想要删除它,这该怎么操作呢?

这时,我们可以使用 pop(),删除列表中的元素。

py 复制代码
integer=[1,2,3,5,7]
#  删除列表最后一个元素
integer.pop()
#  删除列表中的第一个元素
num=integer.pop(0)

print(integer)
print(num)

pop(),作用是删除列表中指定索引处的元素。

括号内的数字表示要删除数据的索引,不填写数字则表示默认删除列表中的最后一个数据。

pop() 在删除列表指定的元素后,可以赋值给变量存储下来。


三、列表的另类定义:

我们前面的例子在定义一个列表时,都是使用的常量来作为列表中的元素。

变量也同样可以作为定义列表的元素,并且列表的各种操作也同样适用于变量数据。

py 复制代码
first=1
second=2
third=3
integer=[first,second,third]
#  删除列表最后一个元素
integer.pop()
#  删除列表中的第一个元素
num=integer.pop(0)

print(integer)
print(num)

上述代码中展示了变量作为列表元素时,代码的使用方式。


好了,列表的内容就到这里了,我们下期再见!

相关推荐
锐学AI几秒前
从零开始学LangChain(二):LangChain的核心组件 - Agents
人工智能·python
风送雨9 分钟前
多模态RAG工程开发教程(上)
python·langchain
棒棒的皮皮12 分钟前
【OpenCV】Python图像处理形态学之膨胀
图像处理·python·opencv·计算机视觉
小草cys15 分钟前
HarmonyOS Next调用高德api获取实时天气,api接口
开发语言·python·arkts·鸿蒙·harmony os
爬山算法15 分钟前
Netty(25)Netty的序列化和反序列化机制是什么?
开发语言·python
未知数Tel18 分钟前
Dify离线安装插件
python·阿里云·pip·dify
龘龍龙19 分钟前
Python基础学习(六)
开发语言·python·学习
Angletank20 分钟前
SpringBoot用JPA接口实现分页和排序
windows·spring boot·后端
热爱专研AI的学妹38 分钟前
【搭建工作流教程】使用数眼智能 API 搭建 AI 智能体工作流教程(含可视化流程图)
大数据·数据库·人工智能·python·ai·语言模型·流程图
databook44 分钟前
拒绝“凭感觉”:用回归分析看透数据背后的秘密
python·数据挖掘·数据分析