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']

 

posted @ 2019-08-05 23:26  ElonJiang  阅读(224)  评论(0编辑  收藏  举报