序列是 Python 中最基本的数据结构。序列中每个元素都有自己的索引(数字),从 0 开始。Python 有 6 个序列的内置类型,最常见的是列表和元组。
基础
生成
列表的生成很简单,使用赋值的方式即可,列表可以包含数字,字符串等基本类型或数组字典这样的结构,甚至是这些的混合数据
1 | l1 = [1, 2, 3, 4] |
取值
取值包括单个值和一个连续的范围,我们可以使用索引来完成
1 | #!/usr/bin/env python |
前两个我们都好理解,最后一个 -1 可能会有点费解,其实可以这样来想,1 是从左边数第二个元素,-1 就是从右边数第二个元素,了解了这点,我们就可以很方便的截取前后的数据
更新
想要修改列表某一个索引的数据,只需要直接对该索引位置赋值即可
1 | #!/usr/bin/env python |
列表通过 append()
方法添加单个列表项
1 | #!/usr/bin/env python |
删除
有很多种方式删除列表元素
1 | #!/usr/bin/env python |
del
和 pop
通过索引删除元素,pop
方法默认删除最后一个对象,会返回被删除的数据,remove
方法查找匹配到的第一个对象并删除
二维数组
Python 中二维数组的本质相当于嵌套数组,就像这样
1 | l = [[1, 2, 3], [4, 5]] |
而想要改变二维数组的值,只需要嵌套索引赋值即可
1 | #!/usr/bin/env python |
拼接/合并
列表的拼接有两种操作符与函数
1 | #!/usr/bin/env python |
去重合并
通过上边的例子,我们可以做一点延伸,如何合并去重
1 | #!/usr/bin/env python |
通过使用列表解析,可以完成去重合并的目的,这也是比较高效的做法
排序
Python 提供了列表的排序方法 sort()
,默认有小到大排列
1 | #!/usr/bin/env python |
另外,还有个倒序排序的方法 reverse()
,他不是由大到小,而只是倒序,比如
1 | #!/usr/bin/env python |
但是由此你可能会想到,可以通过顺序执行这两个方法达到由大到小排序的效果,但是我们有更好的办法,sort()
方法是可以传参数的,有一个参数 reverse
,它默认为 False ,传入 True 即可达到由大到小排序
1 | #!/usr/bin/env python |
乱序
1 | import random |
复杂对象排序
sort()
方法在默认情况下只能对基本类型数据做排序,数字或字符串,但实际开发中列表中的数据通常是更复杂的结果,比如字典,假设我们有这样一组数据,并做排序处理
1 | ex_list = [dict(age=44), dict(age=43), dict(age=24), dict(age=74)] |
1 | unorderable types: dict() < dict() |
它懵逼了,不会处理了。因为这时候需要我们告诉他应该对字典的某一个字段进行排序
1 | #!/usr/bin/env python |
key
需要传入一个方法名,告诉它应该怎么处理的对象并排序,如果 lambda
方法满足不了你的需求,可以额外编写方法,知道了这个原理,我们还可以做一些别的事
1 | #!/usr/bin/env python |
通过传入 str.lower
方法,我们告诉它需要先将字符转为小写,在进行排序,有些时候我们会需要到这种用法
函数
1 | len(list) # 返回列表的长度 |
方法
1 | list.append(obj) # 在列表末尾添加新对象 |
错误集锦
sequence item 0: expected str instance, int found
1 | print(','.join([1, 2, 3])) |
在使用字符串的 join
方法将列表对象拼接为一个字符串时,我们期望出现的结果是 '1,2,3'
会出现这个错误,出错的原因是因为传入的参数列表中不能含有 int 类型对象,这时我们需要对列表做些转换,将列表中的对象都转为字符串,使用列表解析可以很高效的完成这项任务
1 | print(','.join([str(o) for o in [1, 2, 3]])) # ==> '1,2,3' |
