列表学习笔记
序列(sequence)
序列是什么
- 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
- 数据结构指计算机中数据存储的方式
序列有哪些
- 可变序列(序列中的元素可以改变):例如 列表(list)字典(dict)
- 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
列表(list)
列表是什么
- 列表是Python中的一个对象
- 列表的作用
- 列表中可以保存多个有序的数据
- 列表是用来存储对象的对象
列表的基本操作
切片
- 通过切片来获取指定的元素
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
- 起始位置和结束位置的索引可以不写
- 如果省略结束位置, 则会从当前的开始位置一直截取到最后
- 如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素
- 如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素
- 步长表示每次获取元素的间隔,默认是1(可以省略不写)
- 步长不能是0,但可以是是负数
语法及代码示例
- 语法: 列表[起始 : 结束 : 步长]
list1 = [1,2,3,4,5,6,7,8,9]
>>> list1[1:5]
[2, 3, 4, 5]
>>> list[1:5:2]
>>> list1[1:5:2]
[2, 4]
# 反转列表
>>> list1[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
通用操作
- + 和 *
- + 可以将两个列表拼接成一个列表
- * 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
- in 和 not in
- in用来检查指定元素是否在列表当中
- not in 用来检查指定元素是否不在列表当中
- len() 获取列表中元素的个数
- max() 获取列表中最大值
- min() 获取列表中最小值
- list.index(x[, start[, end]])
- 第一个参数 获取指定元素在列表中的位置
- 第二个参数 表示查找的起始位置
- 第三个参数 表示查找的结束位置
- list.count(x) 统计指定元素在列表中出现的个数
代码示例
# + 和 *
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list1 + list2 # 两个列表相加
[1, 2, 3, 4, 5, 6]
>>> list1 * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
# in 和 not in
>>> list1 = [1,2,3,4,5,6]
>>> 1 in list1 # 1 是否在list1中
True
>>> 7 in list1
False
>>> 1 not in list1 # 1 是否不在list1中
False
>>> 7 not in list1
True
# len()
>>> list1 = [1,2,3,4,5,6]
>>> len(list1) # 获取list列表中元素的个数
6
# max()和min()
>>> max(list1)
6
>>> min(list1)
1
# list.index(x[, start[, end]])
>>> list1 = [1,2,3,4,5,6,7,8,9]
>>> list1.index(2)
1
>>> list1.index(9)
8
>>> list1 = ['hello', 'python', 'world']
>>> list1.index('hello')
0
>>> list1.index('python')
1
>>> list1.index('hello', 1, 2) # 查找不到,则抛出ValueError异常
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: 'hello' is not in list
# list.count(x)
>>> list1 = [1,1,2,3,4,4,4,5,6]
>>> list1.count(1)
2
>>> list1.count(4)
3
>>> list1.count(10) # 10不存在于列表,则出现0次
0
列表的修改(切片和del)
- 通过切片来修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)
- 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致
- 通过切片来删除元素
- del list[起始 : 结束]
- list = []
代码示例
- 通过切片修改
>>> list1 = [1,2,3,4,5,6]
>>> list1[1:3] = ['a','b','c','d']
[1, 'a', 'b', 'c', 'd', 4, 5, 6]
# 指定步长
>>> list1 = [1,2,3,4,5,6]
>>> list1[1:5:2] = ['a','b']
>>> list1
[1, 'a', 3, 'b', 5, 6]
# 指定步长 如果序列中元素的个数和切片中元素的个数不一致
# 则会抛出 ValueError 异常
>>> list1[1:5:2] = ['a','b','c']
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: attempt to assign sequence of size 3 to extended slice of size 2
- 通过del关键字修改
>>> list1 = [1,2,3,4,5,6]
>>> del list1[1] # 删除列表中索引为1的元素
[1, 3, 4, 5, 6]
>>> del list1[1:3] # 删除索引为1到索引为3(不包含)的元素
>>> list1
[1, 5, 6]
# 如果索引超过列表,则抛出IndexError异常
>>> del list1[10]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list assignment index out of range
列表的方法
append() 添加
- append() 向列表的最后添加一个元素
代码示例
>>> list1 = [1,2,3,4]
>>> list1.append(5)
[1, 2, 3, 4, 5]
insert()插入
- insert(arg1,arg2) 像列表指定位置插入一个元素 参数1:要插入的位置 参数2:要插入的元素
代码示例
>>> list1 = [1,2,3,4]
>>> list1.insert(0,'a')
['a', 1, 2, 3, 4]
>>> list1.insert(3,'a')
['a', 1, 2, 'a', 3, 4]
extend()扩展
- extend(iterable) 使用一个新的序列来扩展当前序列(它会将该序列的中元素添加到列表中) 参数需要传递一个序列
代码示例
>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7]
>>> list1.extend(list2)
>>>> list1
[1, 2, 3, 4, 5, 6, 7]
pop()删除
- pop() 根据索引删除并返回指定元素
代码示例
>>> list1 = [1,2,3,4]
>>> list1.pop(1) # 删除索引为1的元素,并返回该元素
2
>>> list1
[1, 3, 4]
remove()删除
- remove() 删除指定元素 (如果相同值的元素有多个,只会删除第一个)
代码示例
>>> list1 = [1,2,3,4]
>>> list1.remove(2) # 删除值为2的元素,非索引
>>> list1
[1, 3, 4]
reverse()翻转
- reverse() 翻转列表
代码示例
>>> list1 = [1,2,3,4]
>>> list1.reverse() # 把列表顺序反转
>>> list1
[4, 3, 2, 1]
sort()排序
- sort(key=None,reverse=False) 用来对列表中的元素进行排序
代码示例
>>> list1 = [3,2,1,5,4,8,5,11,2,4]
>>> list1.sort() # 默认按照正序排列
>>> list1
[1, 2, 2, 3, 4, 4, 5, 5, 8, 11]
>>> list1 = [3,2,1,5,4,8,5,11,2,4]
>>> list1.sort(reverse=False) # 指定reverse=False按照倒序排列
>>> list1
[1, 2, 2, 3, 4, 4, 5, 5, 8, 11]
遍历列表
for循环遍历列表及示例
- for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
for 变量 in 序列(遍历的规则):
代码块
>>> list1 = [1,2,3,4,5]
>>> for i in list1:
... print(i)
1
2
3
4
5
range(start, stop[, step])用法及示例
参数说明
- ·start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
>>> for i in range(1,5):
... print(i)
...
1
2
3
4
>>> for i in range(1,5,2):
... print(i)
...
1
3