1 序列(sequence)
- 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
- 数据结构指计算机中数据存储的方式
1.1 序列的分类
- 可变序列(序列中的元素可以改变):例如 列表(list)字典(dict)
- 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
2 列表(list)
- 列表是Python中的一个对象
- 列表的作用
• 列表中可以保存多个有序的数据
• 列表是用来存储对象的对象 - 索引我们可以通过索引(index)来获取列表当中的元素
- 索引就是元素在列表当中的位置 索引从0开始,列表的第一个位置是0 第二个是1 以此类推
-
获取列表的长度 是列表的最大索引值+1
print(len(lst))
- 索引可以是负数
- 如果索引是负数 则从后向前获取元素 -1表示倒数第一个 -2表示倒数第二个 以此类推
3 切片
- 切片是指从现有列表中获得一个子列表
- 通过切片来获取指定的元素
- 语法: 列表[起始 : 结束 : 步长]
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
- 起始位置和结束位置的索引可以不写
如果省略结束位置, 则会从当前的开始位置一直截取到最后
如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素
如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素 - 步长表示每次获取元素的间隔,默认是1(可以省略不写)
- 步长不能是0,但可以是是负数,如果是负数,代表着从列表后向前获取
3 通用操作
- +可以将两个列表拼接成一个列表
- *可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
- in用来检查指定元素是否在列表当中
not in 用来检查指定元素是否不在列表当中 - len() 获取列表中元素的个数
- max() 获取列表中最大值
- min() 获取列表中最小值
- list.index(x[, start[, end]])
• 第一个参数 获取指定元素在列表中的位置
• 第二个参数 表示查找的起始位置
• 第三个参数 表示查找的结束位置
s = ['eggs','eggs','egg','eggs']
print(s.index('egg',1,3))
# 1表示查找的起始位置
# 3表示查找的结束位置
- list.count(x) 统计指定元素在列表中出现的个数
# s.count(x) x 在 s 中出现的总次数
s = ['eggs','eggs','eggs','egg']
print(s.count('egg'))
结果1
4 修改列表
- 通过切片来修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)
# 通过切片修改列表
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero)
hero[2:4] = '1234'
print('修改后',hero)
结果
修改前 ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
修改后 ['钢铁侠', '绿巨人', '1', '2', '3', '4', '蚁人', '美国队长']
例子
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero)
# 向索引为0的位置插入元素
hero[0:0] = ['雷神']
print('修改后',hero)
结果
修改前 ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
修改后 ['雷神', '钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
• 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致
# 通过切片修改列表
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero)
# 修改特定位置的上的元素,把0,2,4位置上的元素换成 雷神
hero[::2] = ['雷神','雷神','雷神']
print('修改后',hero)
结果
修改前 ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
修改后 ['雷神', '绿巨人', '雷神', '黑寡妇', '雷神', '美国队长']
又如 修改特定位置的上的元素,把1,3,5位置上的元素换成 雷神
# 通过切片修改列表
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero)
# 修改特定位置的上的元素,把1,3,5位置上的元素换成 雷神
hero[1::2] = ['雷神'] * 3
print('修改后',hero)
结果
修改前 ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
修改后 ['钢铁侠', '雷神', '蜘蛛侠', '雷神', '蚁人', '雷神']
• 通过切片来删除元素
• del list[起始 : 结束]
• list = []
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('修改前',hero)
# 通过del 删除元素
del hero[2:4]
print('修改后',hero)
结果
修改前 ['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
修改后 ['钢铁侠', '绿巨人', '蚁人', '美国队长']
5. 遍历列表
5.1 for循环
- 指的就是将列表中的元素提取出来
- 通过while循环来遍历列表
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
i = 0
# while i < 6: # 需要自己数数,写死了,不方便
while i < len(hero):
print(hero [i])
i += 1
结果
钢铁侠
绿巨人
蜘蛛侠
黑寡妇
蚁人
美国队长
一般不像上述这样写
- 通过for循环来遍历列表
*注意: for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
for s in hero:
print(s)
结果
钢铁侠
绿巨人
蜘蛛侠
黑寡妇
蚁人
美国队长
5.2 range
- 参数说明
• start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
range(5)
Out[5]: range(0, 5)
• stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
list(range(0,4))
Out[6]: [0, 1, 2, 3]
• step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
list(range(1,5,2))
Out[9]: [1, 3]
练习
# 获取列表当中的奇数
lst = [1,2,3,4,5,6,7,8,9]
# 获取列表当中的奇数
for i in range(0,9,2):
print(lst[i])
结果
1
3
5
7
9