
Python焚诀之数据容器焚诀在最后 先看题题目1元组创建与访问创建一个包含5个不同城市的元组然后打印整个元组打印第3个城市索引2使用 for 循环打印所有城市要求使用元组存储数据使用索引访问元素使用 for 循环遍历元组运行示例城市列表(北京, 上海, 广州, 深圳, 杭州) 第三个城市广州 所有城市 北京 上海 广州 深圳 杭州1a(北京,上海,广州,深圳,杭州)print(f城市列表{a})print(f第三个城市{a[2]})print(所有城市)foriina:print(i)2# 创建包含5个城市的元组cities(北京,上海,广州,深圳,杭州)# 打印整个元组print(f城市列表{cities})# 打印第3个城市索引2print(f第三个城市{cities[2]})# 使用 for 循环遍历打印所有城市print(所有城市)forcityincities:print(city)题目2元组统计编写一个程序创建一个包含数字的元组然后计算并输出元组的长度元组中所有数字的和元组中的最大值元组中的最小值要求定义数字元组至少包含5个数字使用 len()、sum()、max()、min() 函数格式化输出结果运行示例元组(10, 25, 8, 33, 17, 42) 长度6 总和135 最大值42 最小值81a(10,25,8,33,17,42)print(f元组{a})print(f长度{len(a)})print(f总和{sum(a)})print(f最大值{max(a)})print(f最小值{min(a)})2# 创建数字元组numbers(10,25,8,33,17,42)# 计算各项统计值lengthlen(numbers)totalsum(numbers)max_nummax(numbers)min_nummin(numbers)# 输出结果print(f元组{numbers})print(f长度{length})print(f总和{total})print(f最大值{max_num})print(f最小值{min_num})题目3切片操作给定一个列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]使用切片获取以下结果并打印前5个元素后5个元素索引2到索引7的元素含2不含7偶数位置的元素索引0, 2, 4, 6, 8反转后的列表要求使用切片语法实现每次切片结果单独打印运行示例原列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 前5个[1, 2, 3, 4, 5] 后5个[6, 7, 8, 9, 10] 索引2到7[3, 4, 5, 6, 7] 偶数位置[1, 3, 5, 7, 9] 反转后[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]1a[1,2,3,4,5,6,7,8,9,10]print(f原列表{a})print(a[:5])print(a[5:])print(a[2:7])print(a[0::2])print(a[::-1])2# 定义列表my_list[1,2,3,4,5,6,7,8,9,10]print(f原列表{my_list})# 1. 前5个元素print(f前5个{my_list[:5]})# 2. 后5个元素print(f后5个{my_list[5:]})# 3. 索引2到索引7的元素含2不含7print(f索引2到7{my_list[2:7]})# 4. 偶数位置的元素索引0, 2, 4, 6, 8print(f偶数位置{my_list[::2]})# 5. 反转后的列表print(f反转后{my_list[::-1]})题目4集合去重编写一个程序让用户输入多个数字用逗号分隔将这些数字存入一个集合以去除重复项然后输出去重后的集合集合中数字的个数要求使用 input() 获取用户输入如1,2,3,2,1使用 split(‘,’) 将字符串分割为列表将列表转换为集合去重输出去重结果和个数运行示例请输入数字用逗号分隔1,2,3,2,1,4,5,4 去重后的集合{1, 2, 3, 4, 5} 共有 5 个不同的数字1a(input(请输入数字))ba.split(,)cset()foriinb:c.add(i)print(c)print(len(c))2# 获取用户输入user_inputinput(请输入数字用逗号分隔)# 将字符串按逗号分割为列表num_listuser_input.split(,)# 转换为集合去重同时将字符串转换为整数num_setset()fornuminnum_list:num_set.add(int(num))# 或者使用更简洁的方式列表推导式集合# num_set {int(num) for num in num_list}# 输出去重结果print(f去重后的集合{num_set})# 输出集合中数字的个数print(f共有{len(num_set)}个不同的数字)题目5字典基础操作创建一个字典存储个人信息姓名、年龄、城市、职业然后打印整个字典打印年龄修改城市为新的城市添加一个新的键值对如爱好打印更新后的字典要求使用字典存储信息使用键访问和修改值使用赋值语句添加新键值对运行示例原始信息{姓名: 张三, 年龄: 25, 城市: 北京, 职业: 程序员} 年龄25 更新后的信息{姓名: 张三, 年龄: 25, 城市: 上海, 职业: 程序员, 爱好: 篮球}1d{姓名:张三,年龄:25,城市:北京,职业:程序员}print(f原始信息{d})print(f年龄:{d[年龄]})d[城市]安庆# 错误示范# d[4] 爱好# d[爱好] 道馆d[爱好]道馆print(f更新后信息{d})2# 创建字典存储个人信息person{姓名:张三,年龄:25,城市:北京,职业:程序员}print(f原始信息{person})# 打印年龄print(f年龄{person[年龄]})# 修改城市person[城市]上海# 添加新的键值对person[爱好]篮球print(f更新后的信息{person})题目6字典遍历创建一个字典存储3名学生的成绩如{“张三”: 85, “李四”: 92, “王五”: 78}然后使用 for 循环遍历字典的键和值打印每位学生的成绩计算所有学生的平均分要求使用字典存储学生成绩使用items()方法遍历键值对计算并输出平均分保留1位小数运行示例学生成绩 张三85分 李四92分 王五78分 平均分85.0分1s{张三:85,李四:92,王五:78}foriins:print(f{i}:{s[i]})print(f平均分{sum(s.values())/len(s):.1f})2# 创建字典存储学生成绩scores{张三:85,李四:92,王五:78}print(学生成绩)# 遍历字典的键值对total0forname,scoreinscores.items():print(f{name}{score}分)totalscore# 计算平均分averagetotal/len(scores)print(f平均分{average:.1f}分)题目7嵌套字典创建一个嵌套字典存储两个学生的信息每个学生包含姓名、年龄、成绩然后打印所有学生信息打印第二个学生的姓名打印第一个学生的成绩修改第二个学生的成绩为新的分数要求使用嵌套字典存储数据使用多层索引访问数据使用赋值语句修改数据运行示例所有学生信息 { 学生1: {姓名: 张三, 年龄: 18, 成绩: 90}, 学生2: {姓名: 李四, 年龄: 19, 成绩: 85} } 第二个学生的姓名李四 第一个学生的成绩90 修改后第二个学生的成绩951s{学生1:{姓名:张三,年龄:18,成绩:90},学生2:{姓名:李四,年龄:19,成绩:85}}print(f所有学生信息{s})print(s[学生2][姓名])print(s[学生1][成绩])s[学生2][成绩]100print(f更新后所有学生信息{s})2# 创建嵌套字典存储学生信息students{学生1:{姓名:张三,年龄:18,成绩:90},学生2:{姓名:李四,年龄:19,成绩:85}}print(所有学生信息)print(students)# 打印第二个学生的姓名print(f第二个学生的姓名{students[学生2][姓名]})# 打印第一个学生的成绩print(f第一个学生的成绩{students[学生1][成绩]})# 修改第二个学生的成绩students[学生2][成绩]95print(f修改后第二个学生的成绩{students[学生2][成绩]})题目9字典转列表编写一个程序创建一个字典存储商品及其价格然后将所有商品的名称存入一个列表将所有商品的价格存入另一个列表输出商品名称列表和价格列表找出价格最高的商品及其价格要求使用字典存储商品信息使用keys()和values()方法获取键和值使用max()函数找出最高价格运行示例商品信息{苹果: 5.5, 香蕉: 3.0, 橙子: 4.5, 西瓜: 10.0} 商品名称[苹果, 香蕉, 橙子, 西瓜] 商品价格[5.5, 3.0, 4.5, 10.0] 最贵的商品是西瓜价格为10.0元1goods{苹果:5.5,香蕉:3.0,橙子:4.5,西瓜:10.0}namelist(goods.keys())pricelist(goods.values())print(name)print(price)maxpmax(price)midexprice.index(maxp)mnamename[midex]print(f最贵的商品是{mname}价格为{maxp}元)2# 创建字典存储商品及其价格products{苹果:5.5,香蕉:3.0,橙子:4.5,西瓜:10.0}print(f商品信息{products})# 获取所有商品名称和价格nameslist(products.keys())priceslist(products.values())print(f商品名称{names})print(f商品价格{prices})# 找出价格最高的商品及其价格max_pricemax(prices)max_indexprices.index(max_price)max_productnames[max_index]print(f最贵的商品是{max_product}价格为{max_price}元) Python焚诀之数据容器一、今日学习内容1. 元组操作元组是不可变的序列用小括号定义创建后不能修改、添加或删除元素索引从0开始所以第三个元素是索引2可以使用 len() 获取长度sum() 求和max() 和 min() 找最大最小值可以用 for 循环遍历元组中的每个元素2. 列表切片切片语法是列表[起始位置:结束位置:步长]起始位置默认是0结束位置默认到最后步长默认是1关键点结束位置是不包含的比如 [2:7] 包含索引2到6不包含7步长为2表示每隔一个取一个步长为-1可以实现反转3. 集合去重集合用花括号定义自动去除重复元素今天最大的认知纠正split(‘,’) 是按逗号分割字符串不是添加逗号如果用户输入用空格分隔但代码用 split(‘,’)整个字符串会变成一个元素所以输入格式必须和代码中的分割符匹配4. 字典基础操作字典是键值对存储用花括号定义通过键来访问对应的值修改值当键存在时直接赋值就会覆盖旧值添加键值对当键不存在时直接赋值就会新增重要概念键和值必须成对出现一次赋值就是一个键值对不能分两步操作5. 字典遍历三种遍历方式遍历键、遍历值、同时遍历键和值推荐使用 items() 方法同时获取键和值计算平均分等统计时要在循环外计算一次不要在循环内重复计算sum(字典.values()) 是对所有值求和6. 嵌套字典嵌套字典就是字典的值也是字典访问时使用多层索引字典[外层键][内层键]修改嵌套值也是同样的多层索引方式7. 字典转列表使用 list(字典.keys()) 获取所有键的列表使用 list(字典.values()) 获取所有值的列表index() 方法可以查找元素在列表中的位置索引利用两个列表的索引对应关系可以实现通过值找键二、今日易错点汇总第一个易错点split() 的理解很多人以为 split(‘,’) 是添加逗号实际上它是在逗号处把字符串切开。用户输入什么格式代码就要用什么方式分割。第二个易错点字典添加键值对添加键值对是一次性完成的写成 字典[‘新键’] ‘值’ 这一行就够了。不要分两步操作。第三个易错点平均分计算位置平均分应该在循环外计算一次而不是在循环内重复计算。第四个易错点索引从0开始很多初学者会以为第三个元素是索引3实际上是索引2。第五个易错点切片结束位置切片时结束位置是不包含的[2:7] 不包含索引7。第六个易错点index() 方法的使用如果元素不存在index() 会报错。所以最好先用 in 判断一下元素是否存在。三、今日学到的关键方法len()获取长度sum()求和max()找最大值min()找最小值split()按指定字符分割字符串keys()获取字典的所有键values()获取字典的所有值items()获取字典的所有键值对index()查找元素在列表中的位置list()转换为列表四、今日代码模板模板一用户输入去重先用 input 获取用户输入的字符串然后用 split 按逗号分割成列表再用 set 转换为集合自动去重最后输出集合和长度。模板二字典遍历统计用 items() 方法遍历字典的键和值分别打印。统计时用 sum 对所有值求和再除以长度得到平均值。模板三找最值对应的键先把字典的键和值分别提取为两个列表用 max 找到最大值用 index 找到最大值在列表中的位置再用同样的位置从键列表中取出对应的键。五、今日最重要的领悟第一split() 是分割不是添加这是今天最大的认知纠正。之前一直以为 split 是添加逗号现在明白它是在逗号处切开。第二字典添加键值对是一步完成的键和值必须成对出现。不能说我先加个键再加个值必须一次性把键和值都指定好。第三平均分等统计计算应该在循环外完成循环只负责打印每个学生的信息统计在循环结束后统一计算。第四通过索引关联两个列表是编程中的常用技巧。当两个列表的位置一一对应时知道了其中一个列表的索引就能找到另一个列表对应位置的数据。