4.3 列表类型
列表(List)是Python中使用比较频繁的数据类型。列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,支持数字、字符串,甚至可以包含列表(所谓嵌套)。
4.3.1 认识列表类型
微视频
列表是写在中括号([])之间、用逗号分隔开的元素表。要创建一个列表对象,使用中括号([])来包含其元素。例如:
>>>s = [1,2,3,4,5]
列表对象s共有5个元素,可以使用s[0]来返回第1个元素、s[1]来返回第2个元素,以此类推。如果索引值超出范围,Python就会抛出一个IndexError异常。
☆大牛提醒☆
在不知道列表长度的情况下,可以采用负数作为索引来访问。通过将索引指定为-1,可以让Python返回一个列表中最后的元素。例如:
>>>s = [1,2,3,4,5] >>>s[-1] 5
列表对象属于序数对象,是一群有序对象的集合,并且可以使用数字来作索引。列表对象可以进行新增、修改和删除的操作。
列表的常见特性如下:
(1)列表对象中的元素可以是不同的类型,例如:
>>>a=[100," 野径云俱黑",8.99,4+2j]
(2)列表对象中的元素可以是另一个列表,例如:
>>>b = [100," 野径云俱黑",8.99,[ 100," 野径云俱黑",8.99,3.66]]
(3)访问列表中对象的方法比较简单,列表中的序号是从0开始的。例如,访问下面列表中的第3个元素。
>>>c =[100,"野径云俱黑",8.99,[ 100,"野径云俱黑",8.99,3.66]] >>>c[3] [100, '野径云俱黑', 8.99, 3.66]
(4)列表是可以嵌套的,如果要读取列表对象中嵌套的另一个列表,可使用另一个中括号([])来作索引。例如:
>>>c =[100," 野径云俱黑",8.99,[ 100,"野径云俱黑",8.99]] >>>c[3][1] '野径云俱黑'
4.3.2 列表的常见操作
列表创建完成后,还可以对其进行相关的操作。
1.获取某个元素的返回值
使用列表对象的index(c)方法(c是元素的内容)来返回该元素的索引值。例如:
>>>x =[100,"野径云俱黑",8.99,[ 100,"野径云俱黑",8.99]] >>>x.index("野径云俱黑") 1 >>> x.index(8.99) 2
2.改变列表对象的元素值
列表中的元素值是可以改变的。例如,修改列表中的第2个元素。
>>>x =[100,"野径云俱黑",8.99,4+2j] >>>x[1] = "江船火独明" >>>x [100, '江船火独明', 8.99, (4+2j)]
3.删除列表中的元素
使用del语句可以删除列表对象中的元素。例如,删除列表中的第3个元素。
>>>x =[100,"野径云俱黑",8.99,4+2j] >>>del x[2] >>>x [100, '野径云俱黑', (4+2j)]
如果想从列表中删除最后一个元素,可以使用序号-1。例如:
>>>x =[100,"野径云俱黑",8.99,4+2j] >>>del x[-1] #-1表示从右侧数第一个元素 >>>x [100, '野径云俱黑', 8.99]
☆大牛提醒☆
如果想一次清除所有的元素,可以使用del语句操作,命令如下:
del a[:]
4.3.3 列表的内置函数和方法
列表对象有许多的内置函数和方法。下面介绍这些函数和方法的使用技巧。
1.列表的函数
列表内置的函数包括len()、max()、min()和list()。
(1)len()函数返回列表的长度。例如:
>>>x=[100, 200, 300, 400, 500, 600, 700, 800] >>>len(x) 8
(2)max()函数返回列表元素中的最大值。例如,求取列表中的最大值:
>>>a=[100, 200, 300, 400, 500, 600, 700, 800] >>>max(a) 800 >>>b=['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>>max(b) 'g'
列表中的元素数据类型必须一致才能使用max()函数,否则会出错。例如:
>>>a=[100, 200, 300, 400, '字符串变量'] >>>max(a) Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> max(a) TypeError: '>' not supported between instances of 'str' and 'int'
(3)min()函数返回列表元素中的最小值。例如:
>>>a=[100, 200, 300, 400, 500, 600, 700, 800] >>>min(a) 100 >>>b=['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>>min(b) 'a'
2.列表的方法
在Python解释器内输入dir([]),可以查看内置的列表方法。
>>>dir([])
下面将挑选常用的方法进行介绍。
(1)append(object)
append()方法在列表对象的结尾,加上新对象object。例如:
>>>x=[100,200,300,400] >>>x.append(500) >>>x [100, 200, 300, 400, 500] >>>x.append([600,700]) >>>x [100, 200, 300, 400, 500, [600, 700]]
(2)clear()
clear()方法用于清空列表,类似于del a[:]。例如:
>>>s =[100,200,300,400] >>>s.clear() #清空列表 >>>s []
(3)copy()
copy()方法用于复制列表。例如:
>>>a = [100,"野径云俱黑",8.99] >>>b = a.copy() >>>b [100, '野径云俱黑', 8.99]
(4)count(value)
count(value)方法针对列表对象中的相同元素值value计算其数目。例如,计算出列表值为100的元素个数。
>>>a= [100,100,200,100,300,400] >>>a.count(100) 3
(5)extend(list)
extend(list)方法将参数list列表对象中的元素加到此列表中,成为此列表的新元素。例如:
>>>a=[1,2, 3, 4] >>>a.extend([5,6,7,8]) >>>a [1, 2, 3, 4, 5, 6, 7, 8]
(6)index(value)
index(value)方法将列表对象中元素值为value的索引值返回。例如:
>>>a= [1, 2, 3, 4, 5, 6, 7, 8] >>>a.index( 6) 5
(7)insert(index, object)
insert(index, object)方法将在列表对象中索引值为index的元素之前插入新元素object。例如:
>>>x=[1, 2, 3, 4, 5, 6] >>>x.insert(1,"新元素") >>> x [1, '新元素', 2, 3, 4, 5, 6]
(8)pop([index])
pop([index])方法将列表对象中索引值为index的元素删除。如果没有指定index的值,就将最后一个元素删除。例如,删除第2个元素和删除最后一个元素。
>>>x = [1,2,3,[4,5,6]] >>>x.pop( 1) #删除第2个元素 >>>x [1, 3, [4, 5, 6]] >>>x.pop() #删除第2个元素 [4, 5, 6] >>>x [1,3]
☆大牛提醒☆
如果列表为空或者索引值超出范围会报一个异常。
(9)remove(value)
remove(value)方法将列表对象中元素值为value的删除。例如,删除值为“英语”的元素。
>>>x = ["数学","语文","英语"] >>>x.remove("英语") >>>x ["数学","语文"]
(10)reverse()
reverse()方法将列表对象中的元素颠倒排列。例如:
>>>x = ["数学","语文","英语"] >>>x.reverse() >>>x ['英语', '语文', '数学']
(11)sort()
sort()方法将列表对象中的元素依照大小顺序排列。例如:
>>>x = [1,9,8,4,5,3,2,6] >>>x.sort() >>>x [1, 2, 3, 4, 5, 6, 8, 9]
【例4.2】创建一个二维列表,输出不同版式的古诗(源代码\ch04\4.2.py)。
这里首先定义4个字符串,再定义一个二维列表,然后使用for循环将古诗输出,接着使用reverse()函数将列表进行逆序排列,最后使用for循环将古诗以竖版形式输出。
gs1="牧童骑黄牛" gs2="歌声振林樾" gs3="意欲捕鸣蝉" gs4="忽然闭口立" vs=[list(gs1), list(gs2), list(gs3), list(gs4)] #创建一个二维列表 print ("下面输出横版古诗 \n") for n in range( 4): #循环输出古诗的每一行 for m in range( 5): #循环每一行的每一个字 if m==4: #如果是一行中的最后一个字 print (vs[n][m]) #换行输出 else: print (vs[n][m],end="") #不换行输出 vs.reverse() #对列表进行逆序排列 print ("下面输出竖版古诗 \n") for n in range( 5): #循环每一行的每个字 for m in range( 4): #循环新逆序排列后的第一行 if m==3: #如果最后一行 print (vs[m][n]) #换行输出 else: print (vs[m][n],end="") #不换行输出
程序运行结果如图4-2所示。
图4-2 例4.2的程序运行结果