Python学习交流-序列的应用(上)

Python学习交流-序列的应用(上)

在数学里,序列也称为数列,是指按照一定顺序排列的一列数,而在程序设计中,序列是一种常用的数据存储方式,几乎每一种程序设计语言都提供了类似的数据结构。例
如,C语言或Java中的数组等。
在 Python中序列是最基本的数据结构。它是一块用于存放多个值的连续内存空间。Python中内置了5个常用的序列结构,分别是列表、元组、集合、字典和字符串。
在这里插入图片描述

4.1序列

序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列,每一个值(称为元素)都分配一个数字,称为索引或位置。通过该索引可以取出相应的值。例如,我们可以把一家酒店看作一个序列,那么酒店里的每个房间都可以看作是这个序列的元素。而房间号就相当于索引,可以通过房间号找到对应的房间。
在 Python中,序列结构主要有列表、元组、集合、字典和字符串,对于这些序列结构有以下几个通用的操作。其中,集合和字典不支持索引、切片、相加和相乘操作。

4.1.1索引

序列中的每一个元素都有一个编号,也称为索引。这个索引是从0开始递增的,即下标为0表示第一个元素,下标为1表示第2个元素,以此类推。
在这里插入图片描述
Python比较神奇,它的索引可以是负数。这个索引从右向左计数,也就是从最后的一个元素开始计数,即最后一个元素的索引值是-1,倒数第二个元素的索引值为-2,以此类推。
在这里插入图片描述
注意:在采用负数作为索引值时,是从-1开始的,而不是从0开始的,即最后一个元素的下标为-1,这是为了防止与第一个元素重合。
通过索引可以访问序列中的任何元素。例如,定义一个包括4个元素的列表,要访问它的第3个元素和最后一个元素,可以使用下面的代码:
在这里插入图片描述

4.1.2切片

切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素。通过切片操作可以生成一个新的序列。实现切片操作的语法格式如下:
在这里插入图片描述
参数说明:
sname:表示序列的名称。
start:表示切片的开始位置(包括该位置),如果不指定,则默认为0。
end:表示切片的截止位置(不包括该位置),如果不指定,则默认为序列的长度。
step:表示切片的步长,如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略。
说明:在进行切片操作时,如果指定了步长,那么将按照该步长遍历序列的元素,否则将一个一个遍历序列。
例如,通过切片先获取NBA历史上十大巨星列表中的第2个到第5个元素,再获取第1个、第3个和第5个元素,可以使用下面的代码:

nba =["迈克尔・乔丹""比尔・拉塞尔""卡里姆・阿布杜尔,贾巴尔""威尔特・张伯伦""埃尔文。约翰逊""科比。布莱恩特",”蒂姆・邓肯","勒布朗・詹姆斯","拉里・伯德",
"沙奎尔・奥尼尔"]
print(nba[15]#获取第2个到第5个元素
print(nba[052]#获取第1个、第3个和第5个元素

输出:

['比尔。拉塞尔’,'卡里姆.阿布杜尔・贾巴尔','威尔特・张伯伦’,’埃尔文・约翰逊']
['迈克尔・乔丹’,'卡里姆。阿布杜尔・贾巴尔',’埃尔文.约翰逊']

4.1.3序列相加

在 Python中,支持两种相同类型的序列相加操作,即将两个序列进行连接,不会去除重复的元素,使用加(+)运算符实现。例如,将两个列表相加,可以使用下面的代码:

nba1 =["徳怀特・霍华德""德维恩・韦德""凯里・欧文""保罗・加索尔"]
nba2 =["迈克尔・乔丹""比尔・拉塞尔""卡里姆・阿布杜尔・贾巴尔""威尔特・张伯伦""埃尔文。约翰逊""科比。布莱恩特""”蒂姆・邓肯""勒布朗・詹姆斯""拉里・伯德""沙奎尔・奥尼尔"]
print(nba1+nba2)

运行上面的代码,将输出以下内容:

['徳怀特・霍华德,'德维恩・韦德',凯里・欧文’,'保罗・加索尔,迈克尔。乔丹’,'比尔。拉塞尔’,卡里姆。阿布杜尔.贾巴尔',‘威尔特.张伯伦’,’埃尔文・约翰逊'’,'科比.布莱恩特’,'蒂姆.邓肯',‘勒布朗・詹姆斯’,'拉里・伯
德','沙奎尔・奥尼尔']

从上面的输出结果中,可以看出,两个列表被合成一个列表了。说明:在进行序列相加时,相同类型的序列是指同为列表、元组、集合等,序列中的元素类型可以不同。例如,下面的代码也是正确的:

num =[714212835424956]
nba =["德怀特・霍华德""德维恩。韦德""凯里・欧文""保罗・加索尔"]


print(num + nba)

相加后的结果如下:

[714212835424956'德怀特・霍华德,'德维恩・韦德','凯里・欧文’,’保罗・加索尔']

但是不能将列表和元组相加,也不能将列表和字符串相加。例如,下面的代码就是错误的:

num =[71421283542495663]
print(num+"输出的数是7的倍数"

上面的代码,在运行后,将异常信息。

Traceback(most recent call last):
File"E:\program Python Code\datatype_test.рy",line 2in(module> print(num +“输出的数是7的倍数”)
TypeError:can only concatenate listnot"str”)to list
>>>

4.1.4乘法

在 Python中,使用数字n乘以一个序列会生成新的序列。新序列的内容为原来序列被重复n次的结果。例如,下面的代码,将实现把一个序列乘以3生成一个新的序列并输出,从而达到“重要事情说三遍”的效果。

phone =["华为Mate 10""Vivo X21"]
print(phone*3

运行上面的代码,将显示以下内容:

['华为Mate 10',VivoX21','华为Mate 10','Vivo X21','华为Mate 10','Vivo X21']

在进行序列的乘法运算时,还可以实现初始化指定长度列表的功能。例如下面的代码,将创建一个长度为5的列表,列表的每个元素都是None,表示什么都没有。

emptylist =[None]*5
print(emptylist)

运行上面的代码,将显示以下内容:

[NoneNoneNoneNoneNone]

4.1.5检查某个元素是否是序列的成员

在 Python中,可以使用in关键字检查某个元素是否为序列的成员,即检查某个元素是否包含在某个序列中。语法格式如下:
value in sequence其中,value 表示要检查的元素,sequence 表示指定的序列。例如,要检查名称为nba的序列中,是否包含元素“保罗・加索尔”,可以使用下面的代码:

nba =["德怀特・霍华德""德维恩。韦德""凯里。欧文""保罗・加索尔"]
print"保罗・加索尔"in nba)

运行上面的代码,将显示结果True,表示在序列中存在指定的元素。另外,在 Python中,也可以使用 not in关键宇实现检查某个元素是否不包含在指定的序列中。例
如下面的代码,将显示结果False。

nba =["徳怀特・霍华德""德维恩・韦徳""凯里・欧文""保罗・加索尔"]
print"保罗・加索尔"not in nba)

4.1.6 计算序列的长度、最大值和最小值

在 Python中,提供了内置函数计算序列的长度、最大值和最小值。分别是:使用len()函数计算序列的长度,即返回序列包含多少个元素;使用 max()函数返回序列中的最大元素;使用min()函数返回序列中的最小元素。
例如,定义一个包括9个元素的列表,并通过1en()函数计算列表的长度,可以使用下面的代码:

num =[71421283542495663]
print"序列num的长度为",1en(num))

运行上面的代码,将显示以下结果:

序列num的长度为9

例如,定义一个包括9个元素的列表,并通过max()函数计算列表的最大元素,可以使用下面的代码:

num =[71421283542495663]
print"序列",num,"中的最大值为"max(num))

运行上面的代码,将显示以下结果:
序列[7,14,21,28,35,42,49,56,63]中的最大值为63例如,定义一个包括9个元素的列表,并通过min()函数计算列表的最小元素,可以使用下面的代码:

num =[71421283542495663]
print"序列",num,"中的最小值为"min(num)

运行上面的代码,将显示以下结果:
序列[7,14,21,28,35,42,49,56,63]中的最小值为7
除了上面介绍的3个内置函数,Python还提供了内置函数。
在这里插入图片描述

4.2列表

对于歌曲列表大家一定很熟悉,在列表中记录着要播放的歌曲名称,如图4.4所示的手机App歌曲列表页面。
在这里插入图片描述
Python 中的列表和歌曲列表类似,也是由一系列按特定顺序排列的元素组成的。它是Python中内置的可变序列。在形式上,列表的所有元素都放在一对中括号“”中,两个相邻元素间使用逗号“,”分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入到列表中,并且同一个列表中,元素的类型可以不同,因为它们之间没有任何关系。由此可见,Python 中的列表是非常灵活的,这一点与其他语言是不同的

4.2.1列表的创建和删除

在 Python 中提供了多种创建列表的方法,下面分别进行介绍。
1.使用赋值运算符直接创建列表
同其他类型的Python变量一样,创建列表时,也可以使用赋值运算符“=”直接将一个列表赋值给变量,语法格式如下:
listname =[element 1,element 2,element 3,.,element n]其中,listname 表示列表的名称,可以是任何符合Python命名规则的标识符;“elemnet 1,elemnet 2,
clemnet 3,,elemnetn”表示列表中的元素,个数没有限制,并且只要是 Python支持的数据类型就可以。例如,下面定义的列表都是合法的:

num =[71421283542495663]
verse =["自古逢秋悲寂寥""我言秋日胜春朝""晴空一鹤排云上""便引诗情到碧霄"]
untitle =['Python'28"人生苦短,我用Python"["爬虫""自动化运维""云计算""Web开发"]]
python =['优雅'"明确""简单""]

说明:在使用列表时,虽然可以将不同类型的数据放入到同一个列表中,但是通常情况下,我们不这样做,而是在一个列表中只放入一种类型的数据。这样可以提高程序的可读性。
2.创建空列表
在 Python 中,也可以创建空列表,例如,要创建一个名称为emptylist 的空列表,可以使用下面的代码:

emptylist =[]

3,创建数值列表
在 Python 中,数值列表很常用。例如,在考试系统中记录学生的成绩,或者在游戏中记录每个角色的位置、各个玩家的得分情况等都可应用数值列表。在Python中,可以使用list()函数直接将range()
函数循环出来的结果转换为列表。
list()函数的基本语法如下:

list(data)

其中,data表示可以转换为列表的数据,其类型可以是range 对象、字符串、元组或者其他可迭代类型的数据。
例如,创建一个10~20之间(不包括20)所用偶数的列表,可以使用下面的代码:
list(range(10,20,2))
运行上面的代码后,将得到下面的列表:
[10,12,14,,16,18]
说明:使用list()函数不仅能通过range对象创建列表,还可以通过其他对象创建列表。
4.删除列表
对于已经创建的列表,不再使用时,可以使用 del语句将其删除。语法格式如下:
del listname
其中,listname为要删除列表的名称。
说明:del语句在实际开发时,并不常用。因为Python自带的垃圾回收机制会自动销毁不用的列表,所以即使我们不手动将其删除,Python也会自动将其回收。例如,定义一个名称为team的列表,然后再应用 del 语句将其删除,可以使用下面的代码:

team =["皇马""罗马""利物浦""拜仁"]
del team

常见错误:在删除列表前,一定要保证输入的列表名称是已经存在的,否则将出现错误。
在这里插入图片描述

4.2.2访问列表元素

在 Python中,如果想将列表的内容输出也比较简单,可以直接使用 print()函数即可。例如,创建个名称为untitle 的列表,并打印该列表,可以使用下面的代码:

untitle =['Python'28"人生苦短,我用Python"["爬虫""自动化运维""云计算""Web开发"]]
print(untitle)

执行结果如下:

['Python'28'人生苦短,我用Python'['爬虫’,'自动化运维’,'云计算''Web开发',’游戏‘]]

从上面的执行结果中可以看出,在输出列表时,是包括左右两侧的中括号的。如果不想要输出全部的元素,也可以通过列表的索引获取指定的元素。例如,要获取untitle列表中索引为2的元素,可以使用下面的代码:

print(untitle[2]

执行结果如下:
人生苦短,我用Python
从上面的执行结果中可以看出,在输出单个列表元素时,不包括中括号,如果是字符串,还不包括左右的引号。

4.2.3 遍历列表

遍历列表中的所有元素是常用的一种操作,在遍历的过程中可以完成查询、处理等功能。在生活中,如果想要去商场买一件衣服,就需要在商场中逛一遍,看是否有想要的衣服,逛商场的过程就相当于列表的遍历操作。在Python中遍历列表的方法有多种,下面介绍两种常用的方法。
1.直接使用 for循环实现
直接使用 for循环遍历列表,只能输出元素的值,语法格式如下:

for item in listname:
#输出item

其中,item用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可;listname为列表名称。
例如,定义一个保存2017~2018赛季NBA 西部联盟前八名的列表,然后通过for循环遍历该列表,并输出各个球队的名称,代码如下:

print"2017~2018赛季NBA西部联盟前八名:")
team =["休斯顿火箭""金州勇士""波特兰开拓者""犹他爵士""新奥尔良鹈鹕""圣安东尼奥马刺",
’俄克拉荷马城雷霆","明尼苏达森林狼”]
for item in team:
    print(item)

执行上面的代码,将显示如图所示的结果。
在这里插入图片描述
2.使用 for 循环和 enumerate()函数实现使用for 循环和 enumerate()函数可以实现同时输出索引值和元素内容,语法格式如下:

for index,item in enumerate(listname):
#indexfllitem

参数说明:
index:用于保存元素的索引。
item:用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可。
listname为列表名称。
例如,定义一个保存2017~2018赛季NBA 西部联盟前八名的列表,然后通过for循环和 enumerate()
函数遍历该列表,并输出索引和球队名称,代码如下:

print"2017~2018赛季NBA西部联盟前八名:")
team =["休斯顿火箭""金州勇士""波特兰开拓者""犹他爵士""新奥尔良鹈鹕”,"圣安东尼奥马刺",
"俄克拉荷马城雷霆""明尼苏达森林狼"]
for index,item in enumerate(team):
    print(index +1,item)

执行上面的代码,将显示下面的结果:

2017~2018赛季NBA西部联盟前八名:
1休斯顿火箭
2金州勇士
3波特兰开拓者
4犹他爵士
5新奥尔良鹈鹕
6圣安东尼奥马刺
7俄克拉荷马城雷霆
8明尼苏达森林狼

如果想实现分两列显示2017~2018赛季NBA 西部联盟前八名的球队,也就是实现每行输出两个球队名称。

4.2.4添加、修改和删除列表元素

添加、修改和删除列表元素也称为更新列表。在实际开发时,经常需要对列表进行更新。下面我们介绍如何实现列表元素的添加、修改和删除。
1.添加元素
在4.1节介绍了可以通过“”号将两个序列连接,通过该方法也可以实现为列表添加元素。但是这种方法的执行速度要比直接使用列表对象的 append()方法慢,所以建议在实现添加元素时,使用列表对象的 append()方法实现。列表对象的 append()方法用于在列表的末尾追加元素,语法格式如下:
listname.append(obj)
其中,listname为要添加元素的列表名称,obj 为要添加到列表末尾的对象。例如,定义一个包括4个元素的列表,然后应用 append()方法向该列表的末尾添加一个元素,可以使用下面的代码:

phone =["摩托罗拉""诺基亚""三星""OPP0"]
len(phone)
#获取列表的长度
phone,append("iPhone"len(phone)
#获取列表的长度
print(phone)

上面的代码在IDEL 中的Shell 窗口中逐行执行的过程如图所示。
在这里插入图片描述
2,修改元素
修改列表中的元素只需要通过索引获取该元素,然后再为其重新赋值即可。例如,定义一个保存3个元素的列表,然后修改索引值为2的元素,代码如下:

verse =["长亭外""古道边""芳草碧连天"]
print(verse)verse[2]="一行白鹭上青天"
#修改列表的第3个元素
print(verse)

上面的代码在IDLE 中的执行过程如图所示。
在这里插入图片描述
3.删除元素
删除元素主要有两种情况,一种是根据索引删除,另一种是根据元素值进行删除。図根据索引删除
删除列表中的指定元素和删除列表类似,也可以使用del语句实现。所不同的就是在指定列表名称时,换为列表元素。例如,定义一个保存3个元素的列表,删除最后一个元素,可以使用下面的代码:

verse =["长亭外""古道边""芳草碧连天"]
del verse[-1]
print(verse)

上面的代码在IDLE 中的执行过程如图所示。
在这里插入图片描述
根据元素值删除
如果想要删除一个不确定其位置的元素(即根据元素值删除),可以使用列表对象的remove()方
法实现。例如,要删除列表中内容为“公牛”的元素,可以使用下面的代码:

team =["火箭""勇士""开拓者""爵士""鹈鹕""马刺""雷霆""森林狼"]
team.remove("公牛"

使用列表对象的remove()方法删除元素时,如果指定的元素不存在,将出现如图所示的异常信息。
在这里插入图片描述
所以在使用remove()方法删除元素前,最好先判断该元素是否存在,改进后的代码如下:

team =["火箭""勇士""开拓者""爵士""弟胡""马刺""雷霆""森林狼"]
value="公牛” #指定要移除的元素
if team.count(value)>0#判断要删除的元素是否存在
    team.remove(value) #移除指定的元素
print(team)

说明:列表对象的count()方法用于判断指定元素出现的次数,返回结果为0时,表示不存在该元素。执行上面的代码后,将显示下面的列表原有内容:

['火箭''勇士’,'开拓者','爵士','弟鹕’,‘马刺’,雷霆','森林狼']

4.2.5对列表进行统计和计算

Python 的列表提供了内置的一些函数来实现统计、计算的功能。下面介绍几种常用的功能。
1.获取指定元素出现的次数
使用列表对象的 count()方法可以获取指定元素在列表中的出现次数。基本语法格式如下:
listname.count(obj)
参数说明:
listname:表示列表的名称。
obj:表示要判断是否存在的对象,这里只能进行精确匹配,即不能是元素值的一部分。図返回值:元素在列表中出现的次数。
例如,创建一个列表,内容为听众点播的歌曲列表,然后应用列表对象的count()方法判断元素
“云在飞”出现的次数,代码如下:

song =["云在飞""我在诛仙逍遥涧""送你一匹马""半壶纱""云在飞""遇见你""等你等了那么久"]
num = song.count("云在飞"print(num)

上面的代码运行后,结果将显示为2,表示“云在飞”在song列表中出现了两次。
2.获取指定元素首次出现的下标
使用列表对象的 index()方法可以获取指定元素在列表中首次出现的位置(即索引)。基本语法格式如下:

listname.index(obj)

参数说明:
listname:表示列表的名称。
obj:表示要查找的对象,这里只能进行精确匹配。如果指定的对象不存在时,则抛出异常。
返回值:首次出现的索引值。
在这里插入图片描述
例如,创建一个列表,内容为听众点播的歌曲列表,然后应用列表对象的 index()方法判断元素
“半壶纱”首次出现的位置,代码如下:

song =["云在飞""我在诛仙逍遥涧""送你一匹马""半壶纱""云在飞""遇见你""等你等了那么久"]
position = song.index("半壶纱"print(position)

上面的代码运行后,将显示3,表示“半壶纱”在列表song 中首次出现的索引位置是3。3.统计数值列表的元素和
在 Python中,提供了sum()函数用于统计数值列表中各元素的和。语法格式如下:
sum(iterable[,start])
参数说明:
iterable:表示要统计的列表。
start:表示统计结果是从哪个数开始(即将统计结果加上 start所指定的数),是可选参数,如果没有指定,默认值为0。例如,定义一个保存10名学生语文成绩的列表,然后应用 sum()函数统计列表中元素的和,即统计总成绩,然后输出,代码如下:

grade =[98999710010096948995100]
#10名学生的语文成绩列表
total = sum(grade)
#计算总成绩
print"语文总成绩为:",total)

上面的代码执行后,将显示下面的结果:

语文总成绩为:968

4.2.6 对列表进行排序

在实际开发时,经常需要对列表进行排序。Python 中提供了两种常用的对列表进行排序的方法:使用列表对象的sort()方法,使用内置的sorted()函数。
1.使用列表对象的 sort()方法
列表对象提供了sort()方法用于对原列表中的元素进行排序。排序后原列表中的元素顺序将发生改变。列表对象的 sort()方法的语法格式如下:
listname.sort(key=None,reverse=False)
参数说明:
listname:表示要进行排序的列表。
[key:表示指定从每个元素中提取一个用于比较的键(例如,设置“key=str.lower”表示在排序时不区分字母大小写)。
reverse:可选参数,如果将其值指定为True,则表示降序排列;如果为 False,则表示升序排列,默认为升序排列。
例如,定义一个保存10名学生语文成绩的列表,然后应用 sort()方法对其进行排序,代码如下:

grade =[98999710010096948995100]#10名学生语文成绩列表
print"原列表:",grade)grade.sort()#进行升序排列
print"升序:",grade)grade.sort(reverse=True#进行降序排列
print"降序:",grade)

执行上面的代码,将显示以下内容:

原列表:[98999710010096948995100]
升序:[89949596979899100100100]
降序:[10010010099989796959489]

使用 sort()方法进行数值列表的排序比较简单,但是使用 sort()方法对字符串列表进行排序时,采用的规则是先对大写字母排序,然后再对小写字母排序。如果想要对字符串列表进行排序(不区分大小写时),需要指定其key参数。例如,定义一个保存英文字符串的列表,然后应用 sort()方法对其进行升序排列,可以使用下面的代码:

char =['cat''Tom''Angela''pet']
char.sort()#默认区分字母大小写
print"区分字母大小写:",char)
char.sort(key=str.lower)#不区分字母大小写
print"不区分字母大小写:",char)

运行上面的代码,将显示以下内容:

区分字母大小写:['Angela''Tom''cat''pet']
不区分字母大小写:['Angela''cat''pet''Tom']

说明:采用sort()方法对列表进行排序时,对中文支持不好。排序的结果与我们常用的音序排序法或者笔画排序法都不一致。如果需要实现对中文内容的列表排序,还需要重新编写相应的方法进行处理,不能直接使用sort()方法。
2.使用内置的sorted()函数实现
在 Python中,提供了一个内置的sorted()函数,用于对列表进行排序。使用该函数进行排序后,原列表的元素顺序不变。storted()函数的语法格式如下:
sorted(iterable,key=None,reverse=False)
参数说明:
iterable:表示要进行排序的列表名称。
key:表示指定从每个元素中提取一个用于比较的键(例如,设置“key=str.lower”表示在排序时不区分字母大小写)。
reverse:可选参数,如果将其值指定为True,则表示降序排列;如果为 False,则表示升序排列,默认为升序排列。
例如,定义一个保存10名学生语文成绩的列表,然后应用 sorted()函数对其进行排序,代码如下:

grade =[98999710010096948995100]#10名学生语文成绩列表
grade_as = sorted(grade)#进行升序排列
print"升序:",grade_as)
grade_des = sorted(grade,reverse = True#进行降序排列
print"降序:",grade_des)
print"原序列:",grade)

执行上面的代码,将显示以下内容:
升序:[89,94,95,96,97,98,99,100,100,100] 降序:[100,100,100,99,98,97,96,95,94,89] 原序列:[98,99,97,100,100,96,94,89,95,100]
说明:列表对象的sort()方法和内置sorted()函数的作用基本相同;不同点是在使用sort()方法时,会改变原列表的元素排列顺序,而使用storted()函数时,会建立一个原列表的副本,该副本为排序后的列表。

4.2.7列表推导式

使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。列表推导式通常有以下几种常用的语法格式。
(1)生成指定范围的数值列表,语法格式如下:
list-[Expression for var in range]
参数说明:
list:表示生成的列表名称。
Expression:表达式,用于计算新列表的元素。
var:循环变量。
range:采用range()函数生成的range对象。例如,要生成一个包括10个随机数的列表,要求数的范围在10~100(包括)之间,具体代码如下:

import random#导入random标准库
randomnumber =[random.randint(10100for i in range10]
print"生成的随机数为:",randomnumber)

执行结果如下:

生成的随机数为:[381228265867100419715]

(2)根据列表生成指定需求的列表,语法格式如下:
newlist =[Expression for var in list]
参数说明:
newlist:表示新生成的列表名称。
Expression:表达式,用于计算新列表的元素。
var:变量,值为后面列表的每个元素值。
list:用于生成新列表的原列表。
例如,定义一个记录商品价格的列表,然后应用列表推导式生成一个将全部商品价格打五折的列表,具体代码如下:

price =[120053302988620019988888]
sale =[int(x*0.5for x in price]
print"原价格:",price)
print"打五折的价格:",sale)

执行结果如下:

原价格:[120053302988620019988888]
打五折的价格:[6002665149431009994444]

(3)从列表中选择符合条件的元素组成新的列表,语法格式如下:
newlist =[Expression for var in list if condition]
参数说明:
newlist:表示新生成的列表名称。
Expression:表达式,用于计算新列表的元素。
var:变量,值为后面列表的每个元素值。
list:用于生成新列表的原列表。
condition:条件表达式,用于指定筛选条件。
例如,定义一个记录商品价格的列表,然后应用列表推导式生成一个商品价格高于5000元的列表,具体代码如下:

price =[120053302988620019988888]
sale =[x for x in price if x>5000]
print"原列表:",price)
print"价格高于5000的:",sale)

执行结果如下:

原列表:[120053302988620019988888]
价格高于5000的:[533062008888]

4.2.8二维列表的使用

在 Python中,由于列表元素还可以是列表,所以它也支持二维列表的概念。那么什么是二维列表?前文提到酒店有很多房间,这些房间都可以构成一个列表,如果这个酒店有500个房间,那么拿到499号房钥匙的旅客可能就不高兴了,从1号房走到499号房要花好长时间,因此酒店设置了很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊到每个楼层,这种结构就是二维列表结构。使用二维列表结构表示酒店每个楼层的房间号的效果如图所示。
在这里插入图片描述
二维列表中的信息以行和列的形式表示,第一个下标代表元素所在的行,第二个下标代表元素所在的列。在 Python中,创建二维列表有以下三种常用的方法。
1.直接定义二维列表
在 Python中,二维列表是包含列表的列表,即一个列表的每一个元素又都是一个列表。例如,下面就是一个二维列表:

[['千,'山’,'鸟’,飞’,'绝']["万','径','人’,'踪',‘灭"]['孤''舟',’蓑','','翁']['独’,‘钓',寒’,‘江’,'雪"]]

在创建二维列表时,可以直接使用下面的语法格式进行定义:

listname =[[元素11,元素12,元素13.,元素1n][元素21,元素22,元素23.,元素2n]***
[元素n1,元素n2,元素n3,.,元素nn]]

参数说明:
listname:表示生成的列表名称。
[元素11,元素12,元素13,*,元素1n]:表示二维列表的第一行,也是一个列表。其中“元
素11,元素12,元素In”代表第一行中的列。
[元素21,元素22,元素23,,元素2n]:表示二维列表的第二行。図[元素n1,元素n2,元素n3,,元素nn]:表示二维列表的第n行。
例如,定义一个包含4行5列的二维列表,可以使用下面的代码:

verse =[['千,‘山’,'','飞’,'绝"],[万,'','','',']['孤',舟','蓑’,'笠,''],['','钓’,寒',‘江',‘雪"]]

执行上面的代码,将创建以下二维列表:

[['千''山’,'鸟’,‘飞’,'绝']["万,'径','人','踪',‘灭'],['孤','舟’,'蓑’,'笠','翁'],['独’,"钓',
'寒’,‘江,雪']]

2.使用嵌套的for循环创建
创建二维列表,可以使用嵌套的for循环实现。例如,创建一个包含4行5列的二维列表,可以使用下面的代码:

arr =[]
#创建一个空列表
for i in range4):
    arr.append([]#在空列表中再添加一个空列表
    for j in range5):
        arr[i].append(j)#为内层列表添加元素

上面代码在执行后,将创建以下二维列表:

[[01234][01234][01234][01234]]

3.使用列表推导式创建
使用列表推导式也可以创建二维列表,因为这种方法比较简洁,所以建议使用这种方法创建二维列表。例如,使用列表推导式创建一个包含4行5列的二维列表可以使用下面的代码:
arr =[[j for j in range(5)]for i in range(4)]
上面代码在执行后,将创建以下二维列表:

[[O,1234][01234][01234][01234]]

创建二维数组后,可以通过以下语法格式访问列表中的元素:
listname[下标1][下标2]
参数说明:
listname:列表名称。
下标1:表示列表中第几行,下标值从0开始,即第一行的下标为0。
下标2:表示列表中第几列,下标值从0开始,即第一列的下标为0。
例如,要访问二维列表中的第2行,第4列,可以使用下面的代码:
verse[1][3]

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值