四、Python基本数据类型四:列表类型
·列表是Python中内置有序、可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开
·当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙
·在Python中,一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象
1、列表的创建与删除
·使用方括号[]直接创建
list_a = ["String", 1, 'a', [1, 'b', 3]] list_b = [] #创建空列表 print(list_a, '\n', list_b) ''' 输出结果: ['String', 1, 'a', [1, 'b', 3]] [] '''
·使用list()函数创建
list_a = list(range(1, 26, 3)) list_b = list((1, 'a', "abc")) list_c = list() #创建空列表 list_d = list('Hello World') print(list_a, '\n', list_b, '\n', list_c, '\n', list_d) ''' 输出结果: [1, 4, 7, 10, 13, 16, 19, 22, 25] [1, 'a', 'abc'] [] ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'] '''
·使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。
del list_a list_a ''' 输出结果: Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> list_a NameError: name 'list_a' is not defined '''
2、列表元素的增加
(1)使用‘+’运算符
list_a = [1, 2, 3] list_a = list_a + [5] print(list_a, '\n', list_b) ''' 输出结果:
[1, 2, 3]
[1, 2, 3, 5]
'''
·该方法创建了一个新列表,并将原列表中的元素和新元素依次复制到新列表的内存,由于涉及元素的复制,该操作速度较慢
(2)使用append(a)方法
list_a = list('Hello') list_a.append('!') list_a ''' 输出结果: ['H', 'e', 'l', 'l', 'o', '!'] '''
·append()实现的是在特定的列表最后添加一个元素,并且一次只能在列表最后添加一个元素。该方法为原地修改,即直接修改原列表,不产生新的列表,速度较快
(3)使用extend(a, b…)方法
list_a = [1, 2, 3] list_a.extend('a', 4, 'abc') ''' Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> list_a.extend('a', 4, 'abc') TypeError: extend() takes exactly one argument (3 given) ''' list_a.extend(['a', 4, 'abc']) list_a ''' 输出结果: [1, 2, 3, 'a', 4, 'abc'] '''
·extend()实现的是对于特定列表的扩展和增长,可以在列表的最后一次性添加多个元素,该方法为原地修改,不产生新的列表
(4)使用insert(a, b)方法
list_a = ['a', 1, 2, 'b'] list_a.insert(3, 3) list_a ''' 输出结果: ['a', 1, 2, 3, 'b'] '''
·insert(a, b)实现的是在列表的指定位置a处插入元素b,但由于列表的自动内存管理功能,insert()方法会引起插入位置之后所有元素的移动,这会影响处理速度
(5)使用‘*’方法
list_a = [[1, 2, 3] * 2] * 3 list_a ''' [[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]] ''' list_a[0][0] = 'a' list_a ''' [['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3]] '''
·当使用*运算符将包含列表的列表重复并创建新列表时,并不是复制子列表值,而是复制已有元素的引用。因此,当修改其中一个值时,相应的引用也会被修改
3、列表元素的删除
(1)使用del m[n]方法
list_a = [1, 2, 3, 4] del list_a[1] list_a #[1, 3, 4]
·删除列表m指定位置n上的元素
(2)使用pop(n)方法
list_a = [1, 2, 3, 4] list_a.pop() #4 list_a.pop(0) #1 list_a #[2, 3]
·删除并返回列表指定位置(默认为最后一个)上的元素,如果给定的索引超出了列表的范围则抛出异常
(3)使用remove(a)方法
list_a = ['1', 'a', 'b', 1, 2] list_a.remove('1') list_a #['a', 'b', 1, 2] list_a.remove('1') ''' Traceback (most recent call last): File "<pyshell#58>", line 1, in <module> list_a.remove('1') ValueError: list.remove(x): x not in list '''
·删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常
4、列表元素的访问
(1)使用下标直接访问,如果指定下标不存在,则抛出异常
(2)使用index()方法获取指定元素首次出现的下标,若列表对象中不存在指定元素,则抛出异常
list_a = [[1, 2, 3] * 2] * 3 list_a.index(3) ''' Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> list_a.index(3) ValueError: 3 is not in list ''' list_a = [1, 2, 3, 4, 'a', 'b'] list_a.index(3) #2
(3)使用count()方法统计指定元素在列表对象中出现的次数
list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3] list_a.count(2) #3 list_a.count(0) #0
(4)使用in关键字来判断一个值是否存在于列表中,返回结果为“True”或“False”
list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3] 4 in list_a #False 3 in list_a #True 0 not in list_a #True
5、列表切片
(1)列表切片就是指将列表里面的一些列元素(不仅仅是某一个元素)进行获取或者得到
(2)M = N[A:B:C] 表示将N列表里从索引号位置为A开始的元素到B-1处且步长为C的元素的列表获取赋给M
list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3] list_b = list_a[0:6:2] list_b #[1, 3, 3]
(3)切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性
list_a = [1, 2, 3] list_b = list_a[2:6] list_b #[3]
(4)使用切片修改列表元素
·在尾部追加元素
list_a = [1, 2, 3] list_a[len(list_a) : ] = [0] list_a #[1, 2, 3, 0]
·替换元素
list_a = [1, 2, 3, 4, 5, 6] list_a[1:4] = ['a', 'b', 'c'] list_a #[1, 'a', 'b', 'c', 5, 6]
·删除元素
list_a = [1, 2, 3, 4, 5, 6] list_a[1:5] = [] list_a #[1, 6]
·与del结合删除元素
list_a = [1, 2, 3, 4, 5, 6] del list_a[1:5] list_a #[1, 6]
(5)赋值和切片


6、列表推导式
aList = [x*x for x in range(10)]
相当于
>>> aList = []
>>> for x in range(10):
aList.append(x*x)
也相当于
aList = list(map(lambda x: x*x, range(10)))
7、列表函数&方法
|
序号 |
函数 |
|
1 |
cmp(list1, list2) |
|
2 |
len(list) |
|
3 |
max(list) |
|
4 |
min(list) |
|
5 |
list(seq) |
|
6 |
list.append(obj) |
|
7 |
list.count(obj) |
|
8 |
list.extend(seq) |
|
9 |
list.index(obj) |
|
10 |
list.insert(index, obj) |
|
11 |
list.pop([index=-1]) |
|
12 |
list.remove(obj) |
|
13 |
list.reverse() |
|
14 |
浙公网安备 33010602011771号