1. 序列的通用操作
1.序列结构主要有:列表、元组、集合、字典和字符串
2.序列的通用操作包括:索引、切片、序列相加、乘法、检查某个元素是否是序列成员和计算序列的长度、最大值和最小值
3.集合和字典不支持:索引、切片、相加和相乘操作
1.1 索引
verse=['春眠不觉晓','Python不得了','夜来爬数据','好评知多少']
print(verse[0]) # 春眠不觉晓
print(verse[2]) # 夜来爬数据
print(verse[-1]) # 好评知多少
1.2 切片
切片语法格式:
sname[start:end:step]
参数说明:
sname:序列名称
start:序列开始位置(包括该位置),如果不指定,则默认为0
end:序列结束位置(不包括该位置),如果不指定,则默认为序列的长度
step:步长,如省略则默认为1,当省略步长时,最后一个冒号也可以省略
nba=['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
print(nba[1:5]) # ['拉塞尔', '贾巴尔', '科比', '奥尼尔']
print(nba[0:5:2]) # ['乔丹', '贾巴尔', '奥尼尔']
1.3 序列相加
相同数据类型的序列可以相加,相同数据类型是指同为列表、元组,序列中的元素类型可以不同
nba1=['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
nba2=[1,2,3,4,5,6,7,8]
print(nba1+nba2) # ['乔丹', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明', '邓肯', 1, 2, 3, 4, 5, 6, 7, 8]
1.4 乘法
nba1=['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明']
print(nba1*2)# ['乔丹', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明', '乔丹', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明']
还可以实现初始化指定长度列表的功能:
emptylist=[None]*5
print(emptylist)
1.5 检查某个元素是否是序列成员
语法格式:
value in sequence # 检查是否包含元素
或
value not in sequence # 检查是否不包含
参数说明:
value:要检查的元素
sequence:指定的序列
nba1=['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
print('乔丹'innba1) # True
nba1=['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
print('乔丹'notinnba1) # False
1.6 计算序列的长度、最大值和最小值
计算序列的长度
nba1=['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
print(len(nba1)) # 7
最大值
nba1 = ['1','4','5','3','9','7','8']
print(max(nba1))# 9
最小值
nba1 = ['1','4','5','3','9','7','8']
print(max(nba1))# 1
2.列表
2.1 列表的创建和删除
创建列表
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
创建空列表
nba1 = []
创建数值列表
# list()函数可以将数值直接转换成列表
# range()函数是取值范围
re = list(range(10,20,2))
print(re)
删除列表
del listname
删除列表在实际开发中不常用,因为python自带垃圾回收机制
2.2 访问列表元素
verse = ['春眠不觉晓','Python不得了','夜来爬数据','好评知多少']
print(verse)# ['春眠不觉晓','Python不得了','夜来爬数据','好评知多少']
print(verse[0])# 春眠不觉晓
print(verse[2])# 夜来爬数据
print(verse[-1])# 好评知多少
2.3 遍历列表
直接for循环实现
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
for item in nba1:
print(item)
输出为:
乔丹
拉塞尔
贾巴尔
科比
奥尼尔
姚明
邓肯
使用for循环和enumerate()函数实现
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
for index,item in enumerate(nba1):
print(index,item)
输出为:
0 乔丹
1 拉塞尔
2 贾巴尔
3 科比
4 奥尼尔
5 姚明
6 邓肯
2.4 添加、修改和删除列表元素
在列表末尾添加一个元素
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
nba1.append('飞飞')
print(nba1)# ['乔丹', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明', '邓肯', '飞飞']
在指定位置添加元素(执行效率低,一般不使用)
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
nba1.insert(2,'凡凡')
print(nba1)# ['乔丹', '拉塞尔', '凡凡', '贾巴尔', '科比', '奥尼尔', '姚明', '邓肯']
将一个列表中的元素添加到另一个列表
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
nba2 = ['1','4','5','3','9','7','8']
nba1.extend(nba2)
print(nba1)# ['乔丹', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明', '邓肯', '1', '4', '5', '3', '9', '7', '8']
将一个列表中的元素添加到另一个列表,使用+也可使实现功能,但是比对两个代码发现:extend()不会产生新的列表
修改元素
nba1 = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
nba1[0] = '飞飞'
print(nba1)# ['飞飞', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明', '邓肯']
删除元素
根据索引删除
nba = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
del nba[-1]
print(nba)# ['乔丹', '拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明']
根据元素值删除
nba = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯']
nba.remove('乔丹')
print(nba)# ['拉塞尔', '贾巴尔', '科比', '奥尼尔', '姚明', '邓肯']
根据元素值删除时如果元素不存在,则会报错,可以删除前先判断元素是否存在。判断元素是否存在可以用count()统计元素出现的次数。
2.5 对列表进行统计和计算
获取指定元素出现的次数
nba = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯','科比','奥尼尔','科比','奥尼尔']
print(nba.count('科比'))# 3
获取指定元素首次出现的下标
nba = ['乔丹','拉塞尔','贾巴尔','科比','奥尼尔','姚明','邓肯','科比','奥尼尔','科比','奥尼尔']
print(nba.index('科比'))# 3
统计列表元素的和
grade = [15,16,20,13,18]
print(sum(grade))# 82
'''
sum(listname,start)
listname:要统计的列表
start:统计结果从哪个数开始,即统计结果加上start指定的数
'''
grade = [15,16,20,13,18]
print(sum(grade,10))# 92
2.6 对列表进行排序
使用列表对象的sort()方法
语法:
listname.sort(key=None,reverse=False)
liastname:要排序的列表
key:排序规则,例如:key=str.lower表示排序时不区分大小写
reverse:可选参数,如果将其设置为True,表示降序排序;设置为False,表示升序排序,默认为升序排序。
# 默认升序
grade = [15,16,20,13,18]
grade.sort()
print(grade) # [13, 15, 16, 18, 20]
# 降序
grade = [15,16,20,13,18]
grade.sort(reverse = True)
print(grade) # [20, 18, 16, 15, 13]
# 默认区分大小写
grade = ['cat','Tom','pet','Angela']
grade.sort()
print(grade)# ['Angela', 'Tom', 'cat', 'pet']
# 区分大小写
grade = ['cat','Tom','pet','Angela']
grade.sort(key = str.lower)
print(grade)# ['Angela', 'cat', 'pet', 'Tom']
使用内置sorted()函数实现
语法:
sorted(liastname,key=None,reverse=False)
liastname:要排序的列表
key:排序规则,例如:key=str.lower表示排序时不区分大小写
reverse:可选参数,如果将其设置为True,表示降序排序;设置为False,表示升序排序,默认为升序排序。
grade = [15,16,20,13,18]
grade_re = sorted(grade)
print(grade_re)
sort()方法是直接修改原列表
sorted()函数会产生一个新列表,原列表不变
2.7 列表推导式
生成指定范围的数值列表
语法格式:
list = [Expression for var in range]
list:生成的列表名称
Expression:表达式,计算新列表的元素
var:循环变量
range:采用range()函数生成range对象
# 从10~100之间取7个数
import random
li = [random.randint(10,100) for i in range(7)]
print(li)
根据列表生成指定需求的列表
语法格式:
newlist = [Expression for var in list]
newlist:生成的列表名称
Expression:表达式,计算新列表的元素
var:循环变量
list:用于生成新列表的原列表
oldlist = [100,80,50,30,90]
newlist = [int(i*0.5) for i in oldlist]
print(newlist)# [50, 40, 25, 15, 45]
从列表中选择符合条件的元素组成新的列表
语法格式:
newlist = [Expression for var in list if condition]
newlist:生成的列表名称
Expression:表达式,计算新列表的元素
var:循环变量
list:用于生成新列表的原列表
condition:条件表达式,用于指定筛选条件
oldlist = [100,80,50,30,90]
newlist = [x for x in oldlist if x > 50]
print(newlist)# [100, 80, 90]
2.8 二维列表
直接定义二维列表
verse = [
['千','山','鸟','飞','绝'],
['万','径','人','踪','灭'],
['孤','舟','蓑','笠','翁'],
['独','钓','寒','江','雪']
]
使用嵌套的for循环创建
verse = []
for i in range(4):
verse.append([])
for j in range(4):
verse[i].append(j)
print(verse)# [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
使用列表推导式创建
verse = [[j for j in range(5)] for i in range(4)]
print(verse)# [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
二维列表实例
str1 = '千山鸟飞绝'
str2 = '万径人踪灭'
str3 = '孤舟蓑笠翁'
str4 = '独钓寒江雪'
verse = [list(str1),list(str2),list(str3),list(str4)]
# 横板显示
for i in range(4): # 读取每一行
for j in range(5): #读取每一行第一个字
print(verse[i][j],end = '')
print()