Python基础讲义(七):序列类型
序列类型
0x01内容导图

0x02组合类型概述
- 组合类型:基本类型的组合
- 序列类型:字符串、元组、列表
- 字典类型:键值对型
- 集合类型:类似于数学中的集合
- 序列类型通用操作:有序
- 索引和切片:跟字符串的操作一样
- 关系运算:in,归属关系
- 加法运算:两个序列组合成新的序列
- 乘法运算:将序列中的所有元素按倍数复制,以扩充序列
- count:统计函数
- 元组:不可变对象,使用圆括号
0x03列表的常用操作
- 列表:可变对象,使用方括号,多个基本类型的组合,相当于其他语言中的数组。
- 修改型操作
- 索引和切片:可以修改
- 尾部追加、指定位置插入:append方法、insert方法
- 按位置删除:del ls[i]
- 删除指定元素:remove方法
- 清空操作:clear方法
- 案例:成绩统计信息
- 随机产生一组成绩
- 计算平均分
- 求最高分
- 求最低分
- 计算标准差
- 计算中位数
- 代码示例
import random
def init_score(n):
ls = []
for i in range(n):
score = int(random.normalvariate(75, 15)) #以正态分布方式产生随机成绩
score = score if score <= 100 else 100
ls.append(score)
return ls
def calc_avg(s): #计数平均分
total = 0
for x in s:
total += x
return total / len(s)
def get_max(s): #获取最高分
m = 0
for x in s:
if x > m:
m = x
return m
def get_min(s): #获取最低分
pass
def get_variance(s, avg): #计数标准差
pass
def get_median(s): #计数中位数
ls = s.copy()
ls.sort()
n = len(ls)
if n % 2 == 1: #存在中间位置
return ls[n // 2]
else:
return (ls[n // 2] + ls[n // 2 - 1]) / 2 #不存在,中间2个数的平均值
def run():
scores = init_score(15)
avg = calc_avg(scores)
print(scores)
print(f"average: {avg}")
print(f"max score:{get_max(scores)}")
print(f"median:{get_median(scores)}")
if __name__ == "__main__":
run()
练习:
- 完成获取最低分的函数。
- 完成计数标准差的函数。
0x04Pytho列表特有操作
-
栈模拟
- 入栈(push):append函数模拟push操作
- 出栈(pop):pop函数,弹出最后一个元素
- 取栈顶元素(peek):获取最后一个元素,如ls[-1]
- 示例:括号匹配检查
def match(s): """ >>> match("(())") True >>> match("(()") False >>> match(")(())") False >>> match("())") False """ ls = [] for ch in s: if ch == "(": ls.append(ch) elif ls: ls.pop() else:return False return not ls if __name__ == "__main__": import doctest doctest.testmod(verbose=True)练习:增加方括号后的混合检查。
-
列表推导式
- [项表达式 for循环 if过滤条件]
- for循环的简化
ls = [x for x in range(100)] #创建0-99的整数列表 lx = [x*x for x in range(1, 6)] #[1, 4, 9, 16, 25] ly = [int(s) for s in ["12", "34", "56"]] #[12, 34, 56] la = [x for x in range(100) if x % 2 == 0] #0-99的偶数列表,此处仅举例说明过滤条件 -
浅拷贝和深拷贝
- copy库,deepcopy函数
- 嵌套列表拷贝时使用
- 示例:三种复制的区别
ls = [1, 2, 3] la = ls #钥匙复制,对象为同一个 lb = ls.copy() #浅拷贝,一维列表没问题,多维仍不能完全独立 ls[0] = 10 #la:[10,2,3],lb:[1,2,3] ls = [[1, 2], [3, 4]] la = ls.copy() ls[0][0] = 10 #la:[[10, 2], [3, 4]],受影响 import copy lb = copy.deepcopy(ls) #多维列表复制一定记住使用深拷贝 ls[0][0] = 1 #ls恢复为1,但lb维持原值10

0x05小结
- 理解浅拷贝和深拷贝
- 熟练掌握列表并应用
- 熟练掌握列表推导式
- 理解列表和元组的区别
浙公网安备 33010602011771号