6x00 Python序列与列表的使用
6x10 序列(sequence)概述
- 序列为Python中最基本的一种数据结构,用于保存一组有序的数据,所有数据在序列中都有一个唯一的位置(索引),并且序列中的数据会按照添加的顺序来分配索引
- 数据结构指计算机中 数据存储的方式
- 序列乃是一块用于存放多个值的连续内存空间,并按一定顺序排列,每个值(称为元素)都分配一个数字编号(由0开始),称为 索引或位置(indexing)
- 序列结构主要有字符串,元组,列表,集合和字典
6x11 序列的分类
序列的分类:
- 序列结构主要有 字符串,元组,列表,集合和字典
- 可变序列(当中元素可以改变) :列表(list),字典(dict)
- 不可变序列(元素不可改变) : 字符串(str),元组(tuple)
6x11 序列的一般操作
序列结构有以下几个通用的操作:
- 索引
- 切片
- 序列相加,相乘
- 检查某元素是否序列成员(元素)
- 计算长度,最大和最小值… 等等
eg. table = [‘我’,‘是’,‘程’,‘序’,‘员’,‘梁’,‘山’,‘伯’]
eg. next = [6, 4, 3]
操作 | 举例 | 注意 | 结果 |
---|---|---|---|
索引 | table[4] | 索引为0开始 | 员 |
切片 | table[1:5:2] | 切片由索引1开始到4,不包含5,步长为2 | [’是‘,‘序’,‘梁’,‘伯’] |
序列相加 | table + next | 元素可以不同,但序列类型必须一样 | [‘我’,‘是’,‘程’,‘序’,‘员’,‘梁’,‘山’,‘伯’,6,4,3] |
序列乘法 | next*3 | 必须乘于整数 | [6, 4, 3, 6, 4, 3, 6, 4, 3] |
检查是否成员 | 4 in next, '太‘ not in table | 判断真假 | True, True |
计算长度 | len(table) | 计算元素数量 | 8 |
找最大值 | max(next) | 找元素中最大值 | 6 |
找最小值 | min(next) | 找元素中最小值 | 3 |
其他内置函数及其说明:
函数 | 说明 |
---|---|
list() | 将序列转为列表 |
str() | 将序列转为字符串 |
sum(iterable[, start]) | 计算元素总和, iterable为列表,可选从start开始 |
sort(key=None, reverse=False) | 对元素进行排序,将改变本来序列,key为要找的对象值相对的链,reverse如果设为True即反向排序 |
sorted(iterable, key=None, reverse=False) | 对元素进行排序, 将排好的赋值一次,不改变本来序列 |
reversed() | 将序列元素反向排序 |
enumerate() | 组合成一个索引序列,多用在for循环中 |
list.index(obj[, start[, end]]) | 获取指定obj元素在切片元素位置里列表中的位置, 如果没有切片位置则返回第一个的索引值 |
list.count(obj) | 查找指定元素在列表中出现的次数 |
6x20 列表(list)
- 列表是Python中一个对象,以中挂号[]表示,元素以英文逗号","隔开
列表的元素可以任何类型, 不过放入同一类型元素可以提高程序的可读性- 列表的作用:
- 列表中可以保存多个有序数据
- 列表是用来存储对象的对象
table = [1, 0.4,'我',['人生苦短','我用Python'],'''简单''',"开心", None]
6x21 创建列表
6x21a 创建空列表
table = []
直接以空[],或有元素的列表赋值给变量来创建列表
6x21b 创建数值列表
#语法:range(start,stop,step)
#start=开始数,stop=结束数(不包含),step=步长,间隔
list(range(10,20,2)) #创建列表:[10,12,14,16,18]
6x22 添加,修改或删除列表
- 用 切片方式给内容重新赋值,赋值内容必须是序列
- 如果设置了步长,序列中元素的个数必须与切片中元素的个数保持一致
- 添加元素:
- list1.append(“人生苦短”) #将"人生苦短"导入list1最后一个元素
- list1.insert(2, “Python”) #将"Python"插入索引2的位置,本来索引2位置的元素后移至索引3;方法的第一个参数为索引,第二个参数为要插入的元素
- list.extend(seq) #将一个列表中全部元素添加到另一个列表中,将seq添加到list中
- 通过切片删除元素:
- del list[start : end] #以冒号隔开
- del list[-1] #以索引删除指定元素, 多用于根据索引删除
- list[] #删除所有内容
- list.pop() #根据索引删除并返回指定元素 (有返回值)
- list.remove(“Java”) #删除指定元素(如果相同值元素有多个,只删除第一个,多用于不确定位置的元素值删除)
6x23 访问列表元素
table = ['我','是','程','序','员',['是','梁','山','伯']]
print(table)
#访问索引5元素(另一个列表)里的索引1元素
print(table[5][1])
结果:
['我', '是', '程', '序', '员', ['是', '梁', '山', '伯']]
梁
6x24 遍历列表
table = ['我','是','程','序','员',['是','梁','山','伯']]
for i in table:
print(i)
#遍历列表输出索引值和相对元素内容
for index,value in enumerate(table):
print(index,value)
结果:
我
是
程
序
员
['是', '梁', '山', '伯']
0 我
1 是
2 程
3 序
4 员
5 ['是', '梁', '山', '伯']
range()函数:
6x25 对列表进行统计计算
table = ['我','是','程','序','员','是','梁','山','伯']
time = table.count('是') #"是"出现的次数
print(time)
结果:
2
table = ['我','是','程','序','员','是','梁','山','伯']
time = table.index('是') #"是"第一次出现的索引位置
print(time)
结果:
1 #索引位置
table = (6,4,2,7,9,1,5,9)
total = sum(table, 100) #设定开始累算前值为100
print(total)
结果:
143 #把列表累加43后加上开始数100
6x26 对列表进行排序
# key输入比较键 eg.key=str.lower 表示不区分大小写
# 默认区分大小写
list.sort(key=None, reverse=False)
table = ['我','是','程','序','员','是','梁','山','伯']
table1 = [6,4,2,7,9,1,5,9]
table.sort()
table1.sort()
print(table)
print(table1)
结果:
['伯', '员', '山', '序', '我', '是', '是', '梁', '程']
[1, 2, 4, 5, 6, 7, 9, 9]
table = ['我','是','程','序','员','是','梁','山','伯']
table1 = [6,4,2,7,9,1,5,9]
a = sorted(table) #排序列表赋值a
b = sorted(table1) #排序列表1赋值b
print(a)
print(b)
print(table) #检查本来列表是否改变
print(table1) #检查列表1是否改变
结果:
['伯', '员', '山', '序', '我', '是', '是', '梁', '程']
[1, 2, 4, 5, 6, 7, 9, 9]
['我', '是', '程', '序', '员', '是', '梁', '山', '伯']
[6, 4, 2, 7, 9, 1, 5, 9]
6x27 列表推导式
- list = [表达式 for x in range]
list = 生成的列表
表达式 = 计算新列表的元素
x = 循环变量
range = 采用range()函数生成的range对象
price = [250,430,162,2100,888]
sale = [int(x*0.5)for x in price]
print('原价:', price)
print('折扣50%价:', sale)
结果:
原价: [250, 430, 162, 2100, 888]
折扣50%价: [125, 215, 81, 1050, 444]