![Python 3.7从入门到精通(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/212/31476212/b_31476212.jpg)
3.1 列表的基本操作
列表对象属于序数对象,是一群有序对象的集合,并且可以使用数字来做索引。列表对象可以做新增、修改和删除的操作。
3.1.1 列表对象的特性
列表由一系列按特定顺序排列的元素组成。在Python中,用方括号[]来表示列表,用逗号来分割其中的元素。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P56_57050.jpg?sign=1739295983-0d2qWJuCv4muBuMxgGL6KcNxi39nIPU8-0-7168abfc3987e396e295b1837df4b1a4)
运行结果如图3-1所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P56_4995.jpg?sign=1739295983-Q3qST5Nn5AyolBGSKvVSBFx1V24w3Ciz-0-60a393c0a81e452421bd467a1470df3d)
图3-1 运行结果
从结果可以看出,Python不仅输出列表的内容,还包括方括号。
列表的常见特性如下:
(1)列表对象中的元素可以是不同的类型,例如:
>>>aa=[12,"何当共剪西窗烛",1.66,5+3j]
(2)列表对象中的元素可以是另一个列表,例如:
>>>aa = [12,"何当共剪西窗烛",1.66,["一夕轻雷落万丝","霁光浮瓦碧参差",3.66]]
(3)访问列表中对象的方法比较简单,列表中的序号是从0开始的。例如,访问下面列表中的第4个元素。
>>>aa =[12,"何当共剪西窗烛",1.66,["一夕轻雷落万丝","霁光浮瓦碧参差",3.66]] >>>aa[3]
运行结果如图3-2所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P57_5044.jpg?sign=1739295983-lNdmvReWGfJnw48643uJPYP0JPrSYjAl-0-090ab1da5185129e1659328dacb26461)
图3-2 运行结果
(4)列表是可以嵌套的,如果要读取列表对象中嵌套的另一个列表,可使用另一个中括号[]来做索引。例如:
>>>aa =[12,"何当共剪西窗烛",1.66,["一夕轻雷落万丝","霁光浮瓦碧参差",3.66]] >>>aa[3][1]
运行结果如图3-3所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P57_5067.jpg?sign=1739295983-TRCWS0FJwJOT2MWzdoxa2x5Kz9SsL0Ol-0-2c2743100ab3cfe4b7a4469d67809c8b)
图3-3 运行结果
提示 in运算符用于判断一个元素是否存在于列表中,例如:
>>>1 in [1, 2, 3] True
3.1.2 列表的常见操作
列表创建完成后,还可以对其进行相关的操作。
1. 获取某个元素的返回值
使用列表对象的index(c)方法(c是元素的内容)来返回该元素的索引值。例如:
>>>aa =[12,"何当共剪西窗烛",1.66,["一夕轻雷落万丝","霁光浮瓦碧参差",3.66]] >>>aa.index("何当共剪西窗烛") >>>aa.index(1.66)
运行结果如图3-4所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P58_5121.jpg?sign=1739295983-3OSLIuNo7uzbLHlPuouGsgJX39uwGJf8-0-a756f7c2f122728ba7c0fa0be4de4bf8)
图3-4 运行结果
2. 改变列表对象的元素值
列表中的元素值是可以改变的。例如,修改列表中的第2个元素:
>>>aa =[12,"何当共剪西窗烛",1.66,["一夕轻雷落万丝","霁光浮瓦碧参差",3.66]] >>>aa[1] = "却话巴山夜雨时" >>>aa
运行结果如图3-5所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P58_5149.jpg?sign=1739295983-0s81ZXGg5sFcYLI16xgGvLpYEwJPx6kc-0-f0af952539f31036b80040a2940adcc4)
图3-5 运行结果
3. 在列表中插入新元素
例如,在列表的第4个位置插入两个新元素:
>>>aa =[12,"何当共剪西窗烛",1.66] >>>aa[3:] = ["却话巴山夜雨时",1.12] #3:表示从左侧数第4个位置开始添加新元素 >>>aa
运行结果如图3-6所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P58_5179.jpg?sign=1739295983-V2mRl0ay2OTsLHUfrArJ6g7pLAKKHpnk-0-dfb50a6c789e8a5837c44f38c11402e7)
图3-6 运行结果
4. 删除列表中的元素
使用del语句可以删除列表对象中的元素。
例如,删除列表中的第3个元素:
>>>aa =[12,"何当共剪西窗烛",1.66] >>>del aa[2] >>>aa
运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P59_5220.jpg?sign=1739295983-c9cjiQ5yWhn6TDWnAs7uJwahOFSyh9pB-0-1dca8cf8bb9d198da36bd9bebcee6997)
图3-7 运行结果
如果想从列表中删除最后一个元素,可以使用序号-1。例如:
>>>aa= [100, ['A', 'B', 'C']] >>>del aa[-1] #-1表示从右侧数第一个元素 >>>aa [100]
提示 如果想一次清除所有的元素,可以使用del语句操作,命令如下:
del a[:]
3.1.3 列表的操作符+和*
列表的常用操作符包括+和*。其中,列表对+和*的操作与字符串相似。+号用于组合列表,*号用于重复列表。
+号操作符经常用于字符串和列表元素的组合。例如:
>>>aa=[1,2,3]+ [4,5,6] + [7,8,9] >>>aa
运行结果如图3-8所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P59_5278.jpg?sign=1739295983-6rPXZhKIVT9Vpu8WxJdpPnYAJA53cXP1-0-c95ca14ab102b8ba8756df09279c5812)
图3-8 运行结果
>>>aa=["苹果","葡萄","柚子","桃子","橙子"] >>>aa="我最喜欢的水果是"+aa[1] >>>print(aa)
运行结果如图3-9所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P59_5305.jpg?sign=1739295983-C0JfxyBezVZcbIQeqNVGT93ENrVSPddC-0-aaba7e4be1d8b953b49a9878793110a9)
图3-9 运行结果
*号运算符经常用于重复列表中的元素。例如,将列表中的元素重复4次:
>>>aa=[100,200,300,400]*4 >>>aa
运行结果如图3-10所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P60_5336.jpg?sign=1739295983-CFupTupohKjRbPxULfY5xE9o6C9U6k3l-0-2de6d97679294d2ec5508ab3b9366c25)
图3-10 运行结果
如何才能创建一个占有10个元素空间而又不包括任何内容的列表呢?
空列表可以简单地通过中括号来表示([]),如果想创建占有10个元素空间而又不包括内容的列表,可以使用*号来实现,如[]*10,这样就生成了一个包含10个空元素的列表。然而,有时候可能需要一个值来代表空值,表示没有放置任何元素,可以使用None。None是Python的内建值,例如:
>>>aa=[None]*10 >>>aa [None, None, None, None, None, None, None, None, None, None]
3.1.4 内置的函数和方法
列表对象有许多的内置函数和方法,下面学习这些函数和方法的使用技巧。
1. 列表的函数
列表内置的函数包括len()、max()、min()和list()。
(1)len()函数返回列表的长度。例如:
>>>aa=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>>len(aa)
运行结果如图3-11所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P60_5380.jpg?sign=1739295983-OL85eNiesnIPX9BktFgAmYfHVvlmi40D-0-fd2b8d088916dfafb93070252da02d6e)
图3-11 运行结果
(2)max()函数返回列表元素中的最大值。例如求取列表中的最大值:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P60_57074.jpg?sign=1739295983-El8UHR4jTVeXP3INN1nL806qiVeyMWUV-0-bb8e446f51a374987da8cbf370558c6d)
运行结果如图3-12所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P61_5425.jpg?sign=1739295983-hqBl7UuwRQqdKzaolIDcbQiCj97y57Yz-0-ac4ac84f4849fecec4efaa0a6939057b)
图3-12 运行结果
注意 列表中的元素数据类型必须一致才能使用max()函数,否则会出错。例如:
>>>aa=[100, 200, 300, 400, 'qq'] >>>max(aa)
报错信息如图3-13所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P61_5448.jpg?sign=1739295983-lBpKnqLec6VbHGQmqwDru16Xb64M2K0S-0-e51f0f069a44abe9b275da7d83e40539)
图3-13 报错信息
(3)min()函数返回列表元素中的最小值。例如:
>>>aa=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>>min(aa) >>>bb=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'o', 'p'] >>>min(bb)
运行结果如图3-14所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P61_5484.jpg?sign=1739295983-el3G3LECOtfy4bQL7giAV9BpVQ7l11tN-0-9aeb0b8a561a749c72995b0f03ae7df0)
图3-14 运行结果
2. 列表的方法
在Python解释器内输入dir([]),就可以显示这些内置的列表方法。
>>>dir([])
运行结果如图3-15所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P62_5509.jpg?sign=1739295983-oZaxMUdTkIMqtAu684yG2Bj6ZEVJPzyz-0-f17e30d7640a66dfea484b2d19d1f700)
图3-15 运行结果
下面将挑选常用的方法进行介绍。
(1)append(object)
append()方法在列表对象的结尾,加上新对象object。例如:
>>>aa= [100,200,300,400] >>>aa.append(500) >>>aa >>>aa.append([600,700]) >>>aa
运行结果如图3-16所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P62_5550.jpg?sign=1739295983-EqR7mphYzLpmEU9n1XmnxlaGXjgi8saN-0-d7b799b1ef77f5c5fffa0fef920cdac4)
图3-16 运行结果
(2)clear()
clear()函数用于清空列表,类似于del a[:]。例如:
>>>aa =[100,200,300,400,500,600] >>>aa.clear() #清空列表 >>>aa
运行结果如图3-17所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P62_5578.jpg?sign=1739295983-PcEn616DA0p0nC5xrVcVUJhr25aRt0nj-0-862a663bde7ff990abe1e5b8d06b8f2b)
图3-17 运行结果
(3)copy()
copy()函数用于复制列表。例如:
>>>aa = ['苹果', '香蕉', '柚子', 1.88, 2.66, 3.86] >>>bb = aa.copy() >>>bb
运行结果如图3-18所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P63_5616.jpg?sign=1739295983-RSStgObvYv3gOvQ6Cg5w8lUwG5XPX0sh-0-82cc8edd3a1457d388f585bce2fa7e05)
图3-18 运行结果
(4)count(value)
count(value)方法针对列表对象中的相同元素值value计算其数目。例如,计算出列表值为166的元素个数:
>>>aa= [100,133,166,188,166,266] >>>aa.count(166)
运行结果如图3-19所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P63_5638.jpg?sign=1739295983-yL5HiqlXlFRyq8B2wOgD3n97Rk3oJ44t-0-5e0fe70cc6954ab530aa72c60e5fc40a)
图3-19 运行结果
(5)extend(list)
extend(list)方法将参数list列表对象中的元素加到此列表中,成为此列表的新元素。例如:
>>>aa= [100, 200, 300, 400] >>>aa.extend([500,600,700,800]) >>>aa
运行结果如图3-20所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P63_5666.jpg?sign=1739295983-8MdcbYcTzFdanZHNe6rXLa1Uiqt6KdWu-0-1dba83e4b6b7a2908060bd452f7462f5)
图3-20 运行结果
(6)index(value)
index(value)方法将列表对象中元素值为value的索引值返回。例如:
>>>aa= [100, 200, 300, 400, 500, 600, 700, 800] >>>aa.index(800)
运行结果如图3-21所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P63_5689.jpg?sign=1739295983-CtzAJV7Dh2q73DSE8QLyoakvQMxC0oVH-0-61c457feedcc30d6ba6ae72ed0b41116)
图3-21 运行结果
(7)insert(index, object)
insert(index, object)方法将在列表对象中索引值为index的元素之前插入新元素object。例如:
>>>aa=[100, 200, 300, 400, 500, 600, 700, 800] >>>aa.insert(1,"新元素") >>>aa
运行结果如图3-22所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P64_5726.jpg?sign=1739295983-DhQ3gC3p1t1T8jckMJ3tgsMfEvuZdsFQ-0-37181aceae8983cb4254e9ab9a8a5dec)
图3-22 运行结果
(8)pop([index])
pop([index])方法将列表对象中索引值为index的元素删除。如果没有指定index的值,就将最后一个元素删除。例如,删除第2个元素和删除最后一个元素:
>>>aa= [100, 200, 300, [400, 500, 600]] >>>aa.pop(1) >>>aa >>>aa.pop() >>>aa
运行结果如图3-23所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P64_5767.jpg?sign=1739295983-BvtvwA40eC3xmagGv4MnI44cQJcZa1MQ-0-6fd4159271d390b718bd09dbb9fa620a)
图3-23 运行结果
(9)remove(value)
remove(value)方法将列表对象中元素值为value的删除。例如,删除值为300的元素:
>>>aa= [100, 200, 300, 400] >>>aa.remove(300) >>>aa
运行结果如图3-24所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P64_5794.jpg?sign=1739295983-quVKlG0NDDTGDJ8H88uxTNjP2paOzAcs-0-ffe25739070785a88e778c08788a36b1)
图3-24 运行结果
(10)reverse()
reverse()方法将列表对象中的元素颠倒排列。例如:
>>>aa=[100, 200, 300, 400] >>>aa.reverse() >>>aa
运行结果如图3-25所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P65_5832.jpg?sign=1739295983-ek4CTyIOkgu4DKZaAwSpkzGg6Vi0YnTb-0-c2d81a209b0c7cf394f885a87c1506c5)
图3-25 运行结果
(11)sort()
sort()方法将列表对象中的元素依照大小顺序排列。例如:
>>>aa = [100, 600, 800,400,500,200,300,700] >>>aa.sort() >>>aa
运行结果如图3-26所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P65_5861.jpg?sign=1739295983-PJAjir76eMYyFLK2pP7JfR7zsOh1LBcg-0-ec5ceb61ba2547b90e5c284733e4002d)
图3-26 运行结果
3.1.5 递推式构造列表
从Python 2.0开始,可以使用递推式构造列表(list comprehension)的功能。所谓递推式构造列表,是使用列表内的元素创建新的列表。
递推式构造列表的语法如下所示:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P65_57104.jpg?sign=1739295983-NDHhJ3pkwhuaBMYqiL0JXVgLs5ldB5tj-0-5ee4efb519811bdf8cb685b7c11412aa)
sequence代表序数对象,如字符串、元组、列表等。在列表包容的结果中,新列表的元素数目是所有序数对象的元素数目相乘的结果。
下面的示例将字符串对象aa与列表对象laa做列表包容,创建一个新的列表对象。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P65_57105.jpg?sign=1739295983-OmV5Kgxqd54aoqJBPRaR0KD66753w4V8-0-5cc32208b833a391b0fb57ead2fe736a)
运行结果如图3-27所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P66_5932.jpg?sign=1739295983-DQ0ucNQYgLyiFjvZN5NOGJxCqqQTHJan-0-6c08cc21bfcfe359ccd32230136e8896)
图3-27 运行结果
aa字符串对象有两个元素,laa列表对象有4个元素,列表包容产生的新列表有8个元素。
毕达哥拉斯三元数组是数形结合的一个典型例子。毕达哥拉斯学派研究出了一个公式:若m是奇数,则m、(m^2-1)/2及(m^2+1)/2便是三元数组,分别表示一个直角三角形的两条直角边和斜边。
下面的递推式构造列表创建了毕达哥拉斯三元组:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P66_57106.jpg?sign=1739295983-287n4TdFgMll8lD4DNe5JBdybUM7V1bs-0-2575c1c1d11f753da4bae58d0016001f)
运行结果如图3-28所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P66_5960.jpg?sign=1739295983-mkZiwIMLjIMIsMnNSrHlWaI18FRswZQP-0-248207e5d2d21953172c0a195237077b)
图3-28 运行结果