20190805-Python基础 第二章 列表和元组(2)列表
1. list函数,用于将字符串转换为列表
2. 基本的列表操作
修改列表 - 给元素赋值,使用索引表示法给特定的元素赋值,如x[1] = 2
删除元素 - 使用del语句即可
1 name1 = ['a','d','g','h'] 2 name2 = ['1','2','3','4'] 3 del name1[1] 4 print(name1) 5 print(len(name1)) 6 7 del name2[1:3] 8 print(name2) 9 print(len(name2)) 10 11 结果: 12 ['a', 'g', 'h'] 13 3 14 ['1', '4'] 15 2
给切片赋值 - 同时给多个元素赋值
1 name = list('Perl') 2 name[1:] = list('ython') 3 print(name) 4 结果: 5 ['P', 'y', 't', 'h', 'o', 'n']
给切片赋值 - 插入新元素(此时,切片工具中的第一个索引和第二个索引必须相同)
1 name = list('Perl') 2 name[1:1] = list('ython') 3 print(name) 4 结果: 5 ['P', 'y', 't', 'h', 'o', 'n', 'e', 'r', 'l']
3. 列表方法
方法是与对象(列表、数、字符串等)联系紧密的函数。调用方法:
object.method(arguments)
3.1 append - 将一个对象附加到列表末尾 - P34
3.2 clear - 就地清空列表内容
1 list1 = [1,2,3] 2 list1.append(4) 3 print(list1) 4 list1.clear() 5 print(list1) 6 结果: 7 [1, 2, 3, 4] 8 []
3.3 copy - 复制列表
1 a = [1,2,3,4] 2 b = a 3 b[1] = 5 4 print(a) 5 print(b) 6 结果: 7 [1, 5, 3, 4] 8 [1, 5, 3, 4]
上述直接赋值的方法,让b指向a,并不能真正意义上复制一个列表给b,因为他们同时指向了同一个列表,则修改b也是在修改原列表。
1 a = [1,2,3,4] 2 b = a.copy() 3 b[1] = 6 4 print(a) 5 print(b) 6 结果: 7 [1, 2, 3, 4] 8 [1, 6, 3, 4]
3.4 count - 计算指定的元素在列表中出现的次数
1 tobe = ['to','be','or','not','to','be'] 2 print(tobe.count('to')) 3 结果:2 4 5 x = [[1,2],1,1,[2,1,[1,2]]] 6 print(x.count(1)) 7 print(x.count([1,2])) 8 结果:2,1
3.5 extend - 同时将多个值附加到列表末尾(将修改被扩展的序列)
1 a = [1,2,3] 2 b = ['a','b','c','d'] 3 a.extend(b) 4 print(a) 5 结果: 6 [1, 2, 3, 'a', 'b', 'c', 'd']
1 a = [1,2,3] 2 b = ['a','b','c','d'] 3 # 这里看看差异 4 c = a.extend(b) 5 print(a) 6 结果: 7 [1, 2, 3, 'a', 'b', 'c', 'd']
这里如果将c = a.extend(b)(新建一个c变量指向 a.extend(b) ),实际上c变量什么都没有,为None。
3.6 index - 用于在列表中查找指定值第一次出现的索引(若所查找值不属于该列表,则会报错)
1 a_list = ['a','b','c','d'] 2 print(a_list.index('c')) 3 结果:2
3.7 insert - 用于将一个对象插入列表
1 num = [1,2,3,4] 2 num.insert(2,['a','b','c']) 3 print(num) 4 结果: 5 [1, 2, ['a', 'b', 'c'], 3, 4]
同extend一样,也可以使用切片赋值,来获得一样的效果。
3.8 pop
从列表中删除一个元素(末尾为最后一个元素),并返回一个元素
num = [1,2,3,4] c = num.pop(2) print(num) print(c) 结果: [1, 2, 4] 3
pop是唯一既修改列表又返回一个非None值得列表方法,参见3.5。
*** pop可实现一种常见得数据结构——栈(stack),后进先出。(待拓展学习,参见第10章)
3.9 remove
用于删除第一个为指定值得元素。
1 tobe = ['to','be','or','not','to','be'] 2 tobe.remove('to') 3 print(tobe) 4 结果: 5 ['be', 'or', 'not', 'to', 'be']
3.10 reverse
按相反得顺序排列列表中的元素。
1 num = [1,2,3,4] 2 num.reverse() 3 print(num) 4 结果: 5 [4, 3, 2, 1]
3.11 sort - 用于对列表就地排序(对原列表进行修改,不返回排序后列表副本)
1 x = [6,4,5,3,2,0,1] 2 x.sort() 3 print(x) 4 print() 5 结果: 6 [0, 1, 2, 3, 4, 5, 6]
需要排序后的列表副本,并保持原列表不变时,有如下两个方法
1 x1 = [6,4,5,3,2,0,1] 2 # 方法1 3 y1 = x1.copy() 4 y1.sort() 5 print(x1) 6 print(y1) 7 print() 8 # 方法2用sorted()函数,改函数会返回一个列表 9 y2 = sorted(x1) 10 print(y2)
11 结果:
12 [6, 4, 5, 3, 2, 0, 1]
13 [0, 1, 2, 3, 4, 5, 6]
14 [0, 1, 2, 3, 4, 5, 6]
3.12 高级排序
方法sort接受两个可选关键字参数:key和reverse。
参数key,可将其设置为一个用于排序的函数(很多情况下,将参数key设置为一个自定义函数很有用,详细见第6章);
1 x = ['afd','adagdh','eqr6tytregh','rewt','jhgfd'] 2 x.sort(key=len) 3 print(x) 4 结果: 5 ['afd', 'rewt', 'jhgfd', 'adagdh', 'eqr6tytregh']
参数reverse,可将其指定为一个真值(True或False),指定是否要按相反顺序排序。
1 x = ['afd','adagdh','eqr6tytregh','rewt','jhgfd'] 2 x.sort(key=len,reverse=True) 3 print(x) 4 结果: 5 ['eqr6tytregh', 'adagdh', 'jhgfd', 'rewt', 'afd']