- Python王者归来
- 洪锦魁
- 2611字
- 2020-08-28 21:54:52
6-1 认识列表
其实在其他程序语言,相类似的功能是称数组(array)。不过,Python的列表功能除了可以存储相同数据类型,例如,整数、浮点数、字符串,也可以存储不同数据类型,例如,列表内同时含有整数、浮点数和字符串。甚至一个列表也可以内含其他列表(将在6-7节解说)或是字典(dict)(将在9-3节解说),因此,Python可以工作的能力,将比其他程序语言强大。
6-1-1 列表的基本定义
定义列表的语法格式如下:
name_list = [元素1, … , 元素n]# name_list是假设的列表名称
基本上列表的每一个数据称元素,这些元素放在中括号[ ]内,彼此用逗号“,”隔开。如果要打印列表内容,可以使用print( )函数,将列表名称当作变量名称即可。
实例1:NBA球员James前5场比赛得分,分别是23、19、22、31、18,可以用下列方式定义列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P61_38859.jpg?sign=1739603185-uUEQKigcvk4sqzWuWZujr8lnNZ6uqL2f-0-ee76dc07a6b536e97a8f7f596399ebd2)
实例2:为所销售的水果,苹果、香蕉、橘子建立列表,可以用下列方式定义列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P61_38862.jpg?sign=1739603185-vihdZZgZkZQQk6IttBNiWDExEv9p4Q1P-0-7f1f38ff1a91f28085b302f93c5c1706)
在定义字符串时,元素内容也可以使用中文。
实例3:为所销售的水果,苹果、香蕉、橘子建立中文元素的列表,可以用下列方式定义列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P61_38865.jpg?sign=1739603185-VvUEzX7uRMTOhyhcATtmCpzn9EOZq96D-0-c2fd2332719acfb9b482ed85a128abba)
实例4:在实例1的James列表,增加第1个元素,放他的全名。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P61_38868.jpg?sign=1739603185-0LyP3aL6aluaTwd2MLBYqfWGu9mlS8wZ-0-9141e2582b52fb1340fe3b1a0b281c24)
程序实例ch6_1.py:定义列表同时打印,最后使用type( )列出列表数据类型。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P61_38871.jpg?sign=1739603185-gEkTAxp7FYgZTh0pnZ51rqEgBoxl4Coc-0-86f0051d4ebdc96b388f3caed24e960f)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P61_38877.jpg?sign=1739603185-wV1s9IcCibi8gx9lPRTEiyAEeAnTltVq-0-a10b2a4808f6dbd10d671eed5ab4d943)
6-1-2 读取列表元素
我们可以用列表名称与索引读取列表元素的内容,在Python中元素是从索引值0开始配置。所以如果是列表的第一个元素,索引值是0,第二个元素索引值是1,其他依此类推,如下所示:
name_list[i]# 读取索引i的列表元素
程序实例ch6_2.py:读取列表元素的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P62_39295.jpg?sign=1739603185-QPd1AYNmklwm0BoHDevJUwbsFsr65Com-0-1de465fea8c8cf9599f47482e3f49c6c)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P62_39301.jpg?sign=1739603185-AQH197bMjHJfeMFibqIkdIxPl99kE8a3-0-04c4d62bcd17f76097e034fb03f8a41c)
上述程序经过第2行的定义后,列表索引值的解释如下:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P62_39304.jpg?sign=1739603185-Ed6giVlKjD3JPIzXJAs81LBpxGuGnVhs-0-51464c91cb69e36541a1f7584fb5590a)
所以程序第3行至第7行,可以得到上述执行结果。其实我们也可以将2-9节等号多重指定观念应用在列表。
程序实例ch6_2_1.py:一个传统处理列表元素内容方式,与Python多重指定观念的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P62_39307.jpg?sign=1739603185-gTHpswAdFddfd0oNaKpnvbdUmVCX7r3S-0-7044e90d4eb3917a7a062228575cc694)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P62_39313.jpg?sign=1739603185-s7liqpkPbvMq9EtBeJ5PVVqHUNCDPGa4-0-1f3ece1fc717f6e18cc0358425173d1f)
上述程序第11行让整个Python设计简洁许多,这是Python高手常用的程序设计方式,在上述设计中第11行的多重指定变数的数量需与列表元素的个数相同,否则会有错误产生。
6-1-3 列表切片(list slices)
在设计程序时,常会需要取得列表前几个元素、后几个元素、某区间元素或是依照一定规则排序的元素,所取得的系列元素也可称子列表,这个观念称列表切片(list slices),此时可以用下列方法。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_238619.jpg?sign=1739603185-59af8HmRQyFdlq73SRBXBGGfyPYSAaJl-0-ceef81a5e66a87656577cbbff436ce9f)
程序实例ch6_2_2.py:列出特定区间球员的得分子列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_39717.jpg?sign=1739603185-Lnrn7G4rwcphKJn7vSvyrad0xIzAACRD-0-d13f52d7547eac4ca68b1dc9bb8c078d)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_39723.jpg?sign=1739603185-JYJB8DuUzzLq3dLWalpHhCuo0wrgyqcp-0-22ae07c804c0303438f9be6b47f636f2)
程序实例ch6_3.py:列出球队前3名队员、从索引1到最后队员与后3名队员子列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_39726.jpg?sign=1739603185-g1T6XPgZiGpRjyBJV1D3SMyqkBcAvh95-0-80397b6f8274ef4f493bde89b709278b)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_39732.jpg?sign=1739603185-9Sc1XATjiCc9aIl9kzmld54O8eiOr1Z0-0-9fe495986667a54aa0e5ce440608250b)
6-1-4 列表索引值是-1
在列表使用中,如果索引值是-1,代表是最后一个列表元素。
程序实例ch6_4.py:列表索引值是-1的应用,由下列执行结果可以得到各列表的最后一个元素了。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_39736.jpg?sign=1739603185-4Z9pSWzAIEJ7XKSwDRf2a8Q7oBOAp2TH-0-13a668a12aaf872cbb0bb610ad824a1d)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P63_39742.jpg?sign=1739603185-V9NzVLC1LE4prlbWKdwB0bBzFEfyR9u8-0-7273008ea5214d35b2075372a0798c86)
其实在Python中索引-1代表最后1个元素,-2代表最后第2个元素,其他负索引观念可依次类推,可参考下列实例。
程序实例ch6_4_1.py:使用负索引列出warriors列表内容。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40143.jpg?sign=1739603185-FgeL7Z2ESgj4Eah0c8UvRlQiSekfX8F6-0-71cabc56c18f2f50eeb6a75d9c3b6043)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40149.jpg?sign=1739603185-bLqDTWWAOxmCdrJNUVuykYZJQnCO96VS-0-3daaf7d4eb32aab1b0d71a7b5fef54fa)
6-1-5 列表统计资料、最大值max( )、最小值min( )、总和sum( )
Python有内置一些执行统计运算的函数,如果列表内容全部是数值则可以使用max( )函数获得列表的最大值,min( )函数可以获得列表的最小值,sum( )函数可以获得列表的总和。如果列表内容全部是字符或字符串则可以使用max( )函数获得列表的unicode码值的最大值,min( )函数可以获得列表的unicode码值最小值。sum( )则不可使用在列表元素为非数值情况。
程序实例ch6_5.py:计算james球员5场的最高得分、最低得分和5场的得分总计。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40153.jpg?sign=1739603185-RcNjZ0v9H7qtdLqh0okV0jiGUc1yFm0y-0-f5d32392fcc87904d249ccd9cacce82a)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40159.jpg?sign=1739603185-4CmCgkHCnRxxAwMtr3rf3QvBxxo5OdhK-0-411df25ad324c5e516a34b24b22211a8)
上述我们很快获得了统计信息,各位可能会想,当列表内含有字符串,如程序实例ch6_1.py的James列表,这个列表第一个元素是字符串,如果这时仍然直接用max(James)会有错误的。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40162.jpg?sign=1739603185-miScQXBAsnXtmSNaOI6s8IgZzaRGgkGK-0-2971543908f95c0701ca8c1b832f9a90)
碰上这类的字符串我们可以使用6-1-2节方式,用切片方式处理,如下所示。
程序实例ch6_6.py:重新设计ch6_5.py,但是使用James列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40165.jpg?sign=1739603185-YJ6GBmPc3hf6OeEa1Yta0GKAd94syasi-0-9130ac7c017aa40b8f6572da6c3fb24b)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P64_40171.jpg?sign=1739603185-DfR6dNZiwNIJ2uWYQdnsjm8ATxTora5C-0-cf9ea6d5732c9f26a371633a91e4c78f)
6-1-6 列表个数len( )
程序设计时,可能会增加元素,也有可能会删除元素,时间久了即使是程序设计师也无法得知列表内剩余多少元素,此时可以借用本小节的len( )函数,这个函数可以获得列表的元素个数。
程序实例ch6_7.py:重新设计ch6_5.py,增加场次数据。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40576.jpg?sign=1739603185-d3mmsfflmXSha6CDgaV6QOgeGl1PtRBv-0-3afb504c6f2c0b3a830742d1d81c8c53)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40582.jpg?sign=1739603185-EzR5YRwnY5KG7W2axo1uxLvYBT6auiHM-0-5afaa523f81958f530a5acdc86986023)
6-1-7 更改列表元素的内容
可以使用列表名称和索引值更改列表元素的内容。
程序实例ch6_8.py:修改james第5场比赛分数。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40586.jpg?sign=1739603185-rDtfKpfyxyIQT0v8BLukmLGYvCkKi7Ag-0-60e4519dc8ebf3d1bfe4e9b3a4b5267f)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40592.jpg?sign=1739603185-1Z556njMM3UcpPQjvbjIjSjeYoYPihTr-0-3e510ba7c470435f703c166976ba36e8)
这个观念可以用在更改整数数据也可以修改字符串数据。
程序实例ch6_9.py:一家汽车经销商原本可以销售Toyota、Nissan、Honda,现在Nissan销售权被回收,改成销售Ford,可用下列方式设计销售品牌。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40595.jpg?sign=1739603185-qJAeUyJwksiIfXfKSrFCAUNW37pFkfp8-0-8e5dd9d81968eb7cc62d638060c9161d)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40601.jpg?sign=1739603185-Y0Oc2AGuRNry59JxdNKTHU5iIroigcl1-0-88e7c56fd3de520a76a49ce67d2aa26f)
6-1-8 列表的相加
Python是允许列表相加的,相当于将列表结合。
程序实例ch6_10.py:一家汽车经销商原本可以销售Toyota、Nissan、Honda,现在并购一家销售Audi、BMW的经销商,可用下列方式设计销售品牌。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40605.jpg?sign=1739603185-SPMLuZub8sW5tq5zBMQXR3sOE1PWVydi-0-2a0e47899aa52ae49c470f46a63b28e6)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P65_40611.jpg?sign=1739603185-GDlSvyN16IG6ruIdX5Z0qD1LuwdKD3NH-0-66a52db8429d490aa5587feb6cb844f2)
程序实例ch6_11.py:整数列表相加的实例。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P66_41012.jpg?sign=1739603185-aKLIubsfFK2M3mC3m4MDTzrCOB21wsLl-0-095a5b6ef594876e88c40d13d380791d)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P66_41018.jpg?sign=1739603185-MGTE7biIFCRlaH0BxPdm8D0XU5sdeY4S-0-57471890e19fed2f2aa39f85051bd3b5)
6-1-9 列表乘以一个数字
如果将列表乘以一个数字,这个数字相当于是列表元素重复次数。
程序实例ch6_12.py:将列表乘以数字的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P66_41022.jpg?sign=1739603185-dhtnD7bBIek6EXgNvc5LuynJBOW6sYT2-0-62b0d58d7d201f6f22b0e54c39d98ea9)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P66_41028.jpg?sign=1739603185-lfbEUOXmFKh9KnBTwUi77pb2XiIHzK4h-0-ea372341b842cdcc1afb2825c0f8ba16)
6-1-10 列表元素的加法运作
既然我们可以读取列表内容,其实就可以使用相同的观念操作列表内的元素数据。
程序实例ch6_13.py:建立Lebron James和Kevin Love在比赛的得分列表,然后利用列表元素加法运作,列出2个人在第四场比赛的得分总和。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P66_41032.jpg?sign=1739603185-Wczmc5CeZZ9w07CMh4eVQMFUTyw33r4L-0-00e8ed56efcb9f40e70c2a72b47c6818)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P66_41038.jpg?sign=1739603185-4QFOwjwzRgV4fCyOC5PbYP4tmeQyzqiO-0-7de234a5a248677e6bc7390b09979055)
需要注意,由第2行列表定义可知,James[0]是指“Lebron James”,James[1]是第1场得分23,所以James[4]是第4场得分31。第3行Love列表观念相同。
6-1-11 删除列表元素
可以使用下列方式删除指定索引的列表元素:
del name_list[i]# 删除索引i的列表元素
下列是删除列表区间元素。
del name_list[start:end]# 删除从索引start到(end-1)索引的列表元素
下列是删除区间,但是用step作为每隔多少区间再删除。
del name_list[start:end:step]# 每隔step,删除从索引start到(end-1) 索引的列表元素
程序实例ch6_14.py:如果NBA勇士队主将阵容有5名,其中一名队员Bell离队了,可用下列方式设计。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P67_41444.jpg?sign=1739603185-lTjro56m5dHRYiOqDSG5sb4aUmp6pa9J-0-761d1f1c9238cc2a01b0933a35054829)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P67_41450.jpg?sign=1739603185-lotdpMqaBuzDLxRsWqj9qC9qKH6txFDU-0-890708c4055a0aa82dc5d55ce7d35892)
程序实例ch6_15.py:删除列表元素的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P67_41453.jpg?sign=1739603185-jCgX6TTSxyHNIRNdftfMkSSRQ8RVH2Du-0-bc112b38329de827f53bace105a8a258)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P67_41459.jpg?sign=1739603185-WEsxwBGxOPZlZNPyJMKBszNqz5YrGmyw-0-8db65c40711fefc75bed9d0a546dbddf)
以这种方式删除列表元素最大的缺点是,元素删除后我们无法得知删除的是什么内容。有时我们设计网站时,可能想将某个人从VIP客户降为一般客户,采用上述方式删除元素时,我们就无法再度取得所删除的元素数据,未来笔者会介绍另一种方式删除数据,删除后我们还可善加利用所删除的数据。又或者你设计一个游戏,敌人是放在列表内,采用上述方式删除所杀死的敌人时,我们就无法再度取得所删除的敌人元素数据,如果我们可以取得的话,可以在杀死敌人坐标位置放置庆祝动画等。
6-1-12 列表为空列表的判断
如果想建立一个列表,可是暂时不放置元素,可使用下列方式定义。
name_list = [ ]# 这是空的列表
程序实例ch6_16.py:删除列表元素的应用,这个程序基本上会用len( )函数判断列表内是否有元素数据,如果有则删除索引为0的元素,如果没有则列出列表内没有元素了。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P68_41868.jpg?sign=1739603185-VhSAmXjOqAKRg9FN7cBrMM2964B4fXh0-0-76f1b4ae27c5d791dbb56fbc445f1f6b)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P68_41874.jpg?sign=1739603185-B73iTaS8tNjGwAQsFoxRcOBd0xcT9Dtt-0-ad5762f2c4b3fc452a66e0f5f67b4e01)
6-1-13 删除列表
Python也允许我们删除整个列表,列表一经删除后就无法复原,同时也无法做任何操作了,下列是删除列表的方式:
del name_list# 删除列表name_list
实例1:建立列表、打印列表、删除列表,然后尝试再度打印列表结果出现错误信息,因为列表经删除后已经不存在了。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P68_41878.jpg?sign=1739603185-XGGXRqvLm3YIqEMIfAU3wvh2t4tGWBAo-0-6b81210b4ee5224707d6073d5b9578ee)