目录
1. 序列
1.1 基本概念
- 概念:序列是Python中最基本的一种数据结构。用于保存一组有序的数据,所有的数据在序列中都有一个唯一的位置(索引)并且序列中的数据会按照添加的数据来分配索引
- 数据结构:计算机数据的存储方式
- 类型:字符串、列表、字典、元组、集合
1.2 序列的分类
- 可变序列(序列中的元素可以改变):列表(list)、字典(dict)
- 不可变序列(序列中的元素不能改变):字符串(str)、元组(tuple)、集合(set)
2. 列表
- 列表是Python中的一个对象
- 列表的作用
- 列表中可以保存多个有序的数据
- 列表是用来存储对象的对象
2.1 列表的使用
- 列表的创建:通过[ ] 创建一个空列表,如果要添加元素,通过, 隔开
# 列表可以保存任意的对象
# list = [1,2,3,4,5]
list = [1,2,'hello',True,[4,5,6],None]
print(list, type(list))
- 输出:
[1, 2, 'hello', True, [4, 5, 6], None] <class 'list'>
- 列表的索引:我们通过索引(index)来获取列表中的元素,索引是从0开始的
list = [1,2,3,4,5]
print(list[0])
- 输出:
1
- 如果超出索引值,就报错
list = [1,2,3,4,5]
print(list[5])
# IndexError: list index out of range
- 索引也可以是负数:-1表示最后一个,-2表示倒数第二个,以此类推,但不能超过索引值
list = [1,2,3,4,5]
print(list[-1])
print(list[-2])
- 输出:
5
4
- 获取列表的长度:len()函数
list = [1,2,3,4,5]
# 获取列表的长度其实就是列表最大索引值 + 1
print(len(list))
- 输出:
5
- 注意:获取列表的长度其实就是列表最大索引值 + 1
2.2 切片
- 概念:切片是从现有列表中获取一个子列表,通过切片可以获得指定的元素
- 语法:[开始 : 结束 : 步长]
- 通过切片获得指定的元素时,会包含起始位置的元素,不会包含结束位置的元素
- 示例:
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[0:2])
- 输出:
['钢铁侠', '绿巨人']
- 如果省略结束位置,会从当前的开始位置一直截到最后
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[1:])
['绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '美国队长']
- 如果省略开始位置则会从第一个元素截取到结束位置,但是不包括结束位置的元素
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[:3])
['钢铁侠', '绿巨人', '蜘蛛侠']
- 如果开始位置和结束位置都省略,则会从第一个元素截取到最后
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero[:])
['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
- 步长表示每次获取元素的间隔,默认值为1,可以省略
print(hero[0:5:1])
print(hero[0:5])
['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人']
- 步长为2
print(hero[::2])
['钢铁侠', '蜘蛛侠', '蚁人']
- 步长可以为负数
print(hero[::-2])
['美国队长', '黑寡妇', '绿巨人']
- 但是步长不能为0
print(hero[::0]) # ValueError: slice step cannot be zero
3. 通用操作
- +和 *
- +:可以将两个列表拼接成一个列表
list = [1,2,3] + [4,5,6]
print(list)
[1, 2, 3, 4, 5, 6]
- *:和整数相乘就可以吧列表重复指定的次数,但是不能两个列表相乘
list = [1,2,3] * 2
print(list)
list = [1,2,3] * [4,5,6] # TypeError: can't multiply sequence by non-int of type 'list'
- in和not in
- in:用来检测指定的元素是否在列表中,如果在就返回True,不在返回False
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('钢铁侠' in hero)
True
- not in:用来检测指定的元素是否不在列表中,如果不在就返回True,在返回False
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print('绿巨人' not in hero)
False
- min():获取列表的最小值
- max():获取列表的最大值
- list.index():获取指定元素在列表中的位置
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','美国队长']
print(hero.index('蜘蛛侠'))
2
- list.count():统计指定元素在列表中出现的次数
hero2 = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','蜘蛛侠','美国队长']
print(hero2.count('蜘蛛侠'))
2
4. 修改列表
- 通过索引
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','蜘蛛侠','美国队长']
hero[0] = '超人'
- 通过索引修改钢铁侠为超人
['超人', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- 通过del() 删除元素
del hero[2]
- 将索引 2 的蜘蛛侠删除
['钢铁侠', '绿巨人', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- 通过切片
hero[:2] = ['雷神']
['雷神', '蜘蛛侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- 代表向索引为0的位置插入元素
hero[0:0] = ['雷神']
['雷神', '钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- 如果传递的不是一个序列,就会报错
hero[:2] = 1234
TypeError: can only assign an iterable
- 当设置了步长,序列中元素的个数必须与切片中元素的个数一致
hero[::2] = ['雷神','灭霸','奇异博士','格鲁特']
['雷神', '绿巨人', '灭霸', '黑寡妇', '奇异博士', '蜘蛛侠', '格鲁特']
- 通过切片可以删除元素
hero[1:3] = []
['钢铁侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- 不可变序列修改元素
- 字符串不是可变序列,无法直接更改元素,可以将类型转化为list
s = 'python'
s = list(s)
s[1] = 'j'
print(s)
['p', 'j', 't', 'h', 'o', 'n']
5. 列表的方法
- append():向列表的最后添加一个元素
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','蜘蛛侠','美国队长']
hero.append('灭霸')
['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长', '灭霸']
- insert(arg1, arg2):向列表的指定位置插入一个元素;arg1:要插入的索引位置,arg2:要插入的元素
'钢铁侠', '绿巨人', '蜘蛛侠', '卡魔拉', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- extend():传入一个序列,扩展当前的序列
hero.extend('abc')
['钢铁侠', '绿巨人', '蜘蛛侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长', 'a', 'b', 'c']
- clear():清空列表
hero.clear()
[]
- pop():根据索引删除元素并返回指定元素
- 如果不加索引,删除最后一个元素
result = hero.pop(1)
print(result)
绿巨人
['钢铁侠', '蜘蛛侠', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- remove():删除指定元素,如果相同值的元素有多个,只会删除第一个
hero.remove('蜘蛛侠')
['钢铁侠', '绿巨人', '黑寡妇', '蚁人', '蜘蛛侠', '美国队长']
- reverse():反转列表
hero.reverse()
['美国队长', '蜘蛛侠', '蚁人', '黑寡妇', '蜘蛛侠', '绿巨人', '钢铁侠']
- sort():对列表中的元素进行排序,默认升序
list = list('fdngknbntihln')
list.sort()
['b', 'd', 'f', 'g', 'h', 'i', 'k', 'l', 'n', 'n', 'n', 'n', 't']
- 如果需要降序:reverse=True
list.sort(reverse=True)
['t', 'n', 'n', 'n', 'n', 'l', 'k', 'i', 'h', 'g', 'f', 'd', 'b']
6. 遍历列表
6.1 for 循环
- 通过for 循环来遍历列表
# 语法
for 遍历 in 序列:
代码块
- 注意:for 循环的代码会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量
hero = ['钢铁侠','绿巨人','蜘蛛侠','黑寡妇','蚁人','蜘蛛侠','美国队长']
for i in hero:
print(i)
钢铁侠
绿巨人
蜘蛛侠
黑寡妇
蚁人
蜘蛛侠
美国队长
6.2 range(start,stop[, step])
- start:默认为0,可以省略,range(5)等价于range(0,5)
- stop:不包括结束,range(0,5)的结果为[0, 1, 2, 3, 4]
- step:默认为1,range(0,5)等价于range(0,5,1),结果为[0, 1, 2, 3, 4]
- 示例:
# 获取列表中的奇数,用for 遍历
list = [1,2,3,4,5,6,7,8,9]
for i in range(0,9,2):
print(list[i])
1
3
5
7
9