第三次
python 列表与元组
在数学里,序列也称为数列,是指按照一定顺序排列的一列数,而在程序设计中,序列是一种常用的数据存储方式,几乎每种程序设计语言都提供了类似的数据结构,如C语言或Java中的数组等。
在Python中,序列是最基本的数据结构。它是一块用于存放多个值的连续内存空间。Python中内置了5个常用的序列结构,分别是列表、元组、集合、字典和字符串。
通过阅读本文,您可以
了解什么是序列
序列的基本操作
列表及二维列表的基本操作
列表推导式的应用
元组的基本操作
元组推导式的应用
元组和列表的区别
目录
序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列,每个值(称为元素)都分配一个数字,称为索引或位置。通过该索引可以取出相应的值。例如,我们可以把一家酒店看作一个序列,那么酒店里的每个房间都可以看作是这个序列的元素。而房间号就相当于索引,可以通过房间号找到对应的房间。
在Python中,序列结构主要有列表、元组、集合、字典和字符串。对于这些序列结构有以下几个通用的操作。其中,集合和字典不支持索引、切片、相加和相乘操作。
索引
序列中的每个元素都有一个编号,也称为索引(Indexing)。这个索引是从0开始递增的,即下标为0表示第一个元素,下标为1表示第二个元素,依此类推,
Python比较神奇,它的索引可以是负数。这个索引从右向左计数,也就是从最后的一个元素开始计数,即最后一个元素的索引值是−1,倒数第二个元素的索引值为−2,依此类推,
注意
在采用负数作为索引值时,是从−1开始的,而不是从0开始的,即最后一个元素的下标为−1,这是为了防止与第一个元素重合。
通过索引可以访问序列中的任何元素。例如,定义一个包括4个元素的列表,要访问它的第三个元素和最后一个元素,可以使用下面的代码。
晴空一鹤排云上
-
切片
切片(sliceing)操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素。通过切片操作可以生成一个新的序列。
sname[start : end : step]
sname:表示序列的名称;
start:表示切片的开始位置(包括该位置),如果不指定,则默认为0;
end:表示切片的截止位置(不包括该位置),如果不指定,则默认为序列的长度;
step:表示切片的步长,如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略。
在进行切片操作时,如果指定了步长,那么将按照该步长遍历序列的元素,否则将一个一个遍历序列。
序列相加
在Python中,支持两种相同类型的序列相加(adding)操作。即将两个序列进行连接,不会去除重复的元素,使用加(+)运算符实现。
将两个列表相加,可以使用下面的代码。
运行上面的代码,将输出以下内容:
['自古逢秋悲寂寥', '我言秋日胜春朝', '晴空一鹤排云上', '便引诗情到碧霄', '青青园中葵', '朝露待日晞', '阳春布德泽',
'万物生光辉', '常恐秋节至', '焜黄华叶衰', '百川东到海', '何时复西归', '少壮不努力', '老大徒伤悲']
在进行序列相加时,相同类型的序列是指,同为列表、元组、字符串等,序列中的元素类型可以不同。
-
计算序列的长度、最大值和最小值
在Python中,提供了内置函数计算序列的长度、最大值和最小值。分别是:使用len()函数计算序列的长度,即返回序列包含多少个元素;使用max()函数返回序列中的最大元素;使用min()函数返回序列中的最小元素。
例如,定义一个包括9个元素的列表,并通过min()函数计算列表的最小元素,可以使用下面的代码。
01 num = [7,14,21,28,35,42,49,56,63]
02 print("序列",num,"中最小值为",min(num))
运行上面的代码,将显示以下结果。
序列 [7, 14, 21, 28, 35, 42, 49, 56, 63] 中最小值为 7
Python提供的内置函数及其说明
列表的创建和删除
在Python中提供了多种创建列表的方法
-
使用赋值运算符直接创建列表
同其他类型的Python变量一样,创建列表时,也可以使用赋值运算符“=”直接将一个列表赋值给变量。
01 num = [7,14,21,28,35,42,49,56,63]
02 verse = ["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上","便引诗情到碧霄"]
03 untitle = ['Python',28,"人生苦短,我用Python",["爬虫","自动化运维","云计算","Web开发"]]
04 python = ['优雅',"明确",'''简单''']
在使用列表时,虽然可以将不同类型的数据放入同一个列表中,但是通常情况下,我们不这样做,而是在一个列表中只放入一种类型的数据。这样可以提高程序的可读性。
创建空列表
在Python中,也可以创建空列表,
emptylist = []
创建数值列表
在Python中,可以使用list()函数直接将range()函数循环出来的结果转换为列表。
list()函数的基本语法如下:
list(data)
其中,data表示可以转换为列表的数据,其类型可以是range对象、字符串、元组或者其他可迭代类型的数据。
创建一个10~20(不包括20)中所有偶数的列表,可以使用下面的代码。
list(range(10, 20, 2))
删除列表 对于已经创建的列表,不再使用时,可以使用del语句将其删除。
del listname
访问列表元素
如果想将列表的内容输出也比较简单,可以直接使用print()函数。
列 输出每日一帖。
在上面的代码中,datetime.datetime.now()方法用于获取当前日期,而weekday()方法则是从日期时间对象中获取星期,其值为0~6中的一个,为0时代表星期一,为1时代表星期二,依此类推,为6时代表星期日。
添加、修改和删除列表元素
添加元素时,使用列表对象的append()方法实现,列表对象的append()方法用于在列表的末尾追加元素,
listname.append(obj)
列 定义一个包括4个元素的列表,然后应用append()方法向该列表的末尾再添加一个元素,
修改元素
修改列表中的元素只需要通过索引获取该元素,然后再为其重新赋值即可。
01 verse = ["长亭外","古道边","芳草碧连天"] 02 print(verse) 03 verse[2] = "一行白鹭上青天" # 修改列表的第3个元素 04 print(verse)
删除元素
删除元素主要有两种情况,一种是根据索引删除,另一种是根据元素值进行删除。
根据索引删除 删除列表中的指定元素和删除列表类似,也可以使用del语句实现。所不同的就是在指定列表名称时,换为列表元素。
01 verse = ["长亭外","古道边","芳草碧连天"]
02 del verse[-1]
03 print(verse)
根据元素值删除
如果想要删除一个不确定其位置的元素(即根据元素值删除),可以使用列表对象的remove()方法实现。例如,要删除列表中内容为“古道边”的元素,可以使用下面的代码。
01 verse = ["长亭外","古道边","芳草碧连天"]
02 verse.remove("古道边")
元组
元组(tuple)是Python中另一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成。但是它是不可变序列。因此,元组也可以称为不可变的列表。在形式上,元组的所有元素都放在一对小括号“()”中,两个相邻元素间使用逗号“,”分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入元组中,并且同一个元组中,元素的类型可以不同,因为它们之间没有任何关系。通常情况下,元组用于保存程序中不可修改的内容。
从元组和列表的定义上看,这两种结构比较相似,那么它们之间有哪些区别呢?它们之间的主要区别就是一个是不可变序列,一个是可变序列。即元组中的元素不可以单独修改,而列表则可以任意修改。
元组的创建和删除
使用赋值运算符直接创建元组
同其他类型的Python变量一样,创建元组时,也可以使用赋值运算符“=”直接将一个元组赋值给变量
01 num = (7,14,21,28,35,42,49,56,63)
02 ukguzheng = ("渔舟唱晚","高山流水","出水莲","汉宫秋月")
03 untitle = ('Python',28,("人生苦短","我用Python"),["爬虫","自动化运维","云计算","Web开发"])
04 python = ('优雅',"明确",'''简单''')
在Python中,虽然元组是使用一对小括号将所有的元素括起来。但是实际上,小括号并不是必需的,只要将一组值用逗号分隔开来,Python就可以认为它是元组。
ukguzheng = "渔舟唱晚","高山流水","出水莲","汉宫秋月"
创建空元组
emptytuple = ()
空元组可以应用在为函数传递一个空值或者返回空值时。例如,定义一个函数必须传递一个元组类型的值,而我们还不想为它传递一组数据,那么就可以创建一个空元组传递给它。
删除元组
对于已经创建的元组,不再使用时,可以使用del语句将其删除。
访问元组元素
('Python', 28, ('人生苦短', '我用Python'), ['爬虫', '自动化运维', '云计算', 'Web开发'])
从上面的执行结果中可以看出,在输出元组时,是包括左右两侧的小括号的。如果不想输出全部元素,也可以通过元组的索引
元组与列表的区别
元组和列表都属于序列,而且它们又都可以按照特定顺序存放一组元素,类型又不受限制,只要是Python支持的类型都可以。那么它们之间有什么区别呢?
简单理解:列表类似于我们用铅笔在纸上写下自己喜欢的歌曲,写错了还可以擦掉。而元组则类似于用钢笔写下的歌曲名字,写上了就擦不掉了,除非换一张纸重写。
列表和元组的区别主要体现在以下5个方面。
(1)列表属于可变序列,它的元素可以随时修改或者删除,而元组属于不可变序列,其中的元素不可以修改,除非整体替换。
(2)列表可以使用append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而元组则没有这几个方法,因为不能向元组中添加和修改元素。同样,也不能删除元素。
(3)列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
(4)元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组而不使用列表。
(5)列表不能作为字典的键,而元组可以。