第五课、python中可变类型的数据集合
一、课程介绍
课时介绍
- 列表简单介绍
- 列表常用操作
- 列表的应用
- 字典的简单介绍
- 字典的基本操作
- 字典的应用
课程目标
- 掌握列表的特性与使用方法
- 掌握字典的特性与使用方法
二、列表的介绍与基本操作(最重要的数据类型一定要掌握好)
2-1 列表介绍与创建
数据结构
- 数据结构就是指从计算机存储、组织数据的结构
- 常用的数据结构
- 列表(List)
- 元组(Tuple)
- 字典(Dictionary)
- 集合(Set)
列表(List)的特点
- 列表中的数据按顺序排列
- 列表有正序与倒序两种索引
- 列表可存储任意类型数据,且允许重复
正序索引 n-1 倒叙索引 -n
1 list = ['a' , 'b' , 'c' , 'd' , 1 , 2 , 3 , 4] 2 print(list) 3 list1 = [] 4 print(list1)
2-2 列表的取值
1 #列表的取值 2 list = ['张三' , '李四' , '王五' , '赵六' , '钱七' , '孙八'] 3 print(list) 4 #取值的语法:变量 = 列表变量[索引值] 5 zhaoliu =list[3] 6 print(zhaoliu) 7 zhaoliu=list[-3] 8 print(zhaoliu) 9 #范围取值:列表变量=原列表变量[起始索引:结束索引] 10 #在python中列表范围取值是“左闭右开” 11 list1 = list[1:4] 12 print(list1) 13 print(list1[-1]) 14 #列表的index函数用于获取指定元素的索引值 15 zhaoliu_index = list.index('赵六') 16 print(zhaoliu_index)
2-3 遍历列表(for循环)
for..in语句
- for..in语句专门用于遍历列表、元组等数据结构
- for迭代变量in可迭代对象
- 循环体(必须缩进)
1 #遍历列表 2 persons = ['张三' ,'赵六' , '李四' , '王五' , '赵六' , '钱七' , '孙八'] 3 count=len(persons)#获取列表长度 4 print(count) 5 #for循环用于遍历列表 6 #for 迭代变量 in 可迭代对象 7 i = 0 8 for a in persons: 9 if a == '赵六': 10 ri = count * -1 + i 11 print(a, i, ri) 12 i += 1 13 14 i=0 15 while i < len(persons): 16 p = persons[i] 17 if p =='赵六': 18 ri=count * -1 + i 19 print(p , i , ri) 20 i += 1
2-4 列表的反转与排序
- reverse方法用于反转列表
-
sort()用于排序,reverse=True代表降序排列
1 #列表的反转与排序 2 persons = ['张三' ,'赵六' , '李四' , '王五' , '赵六' , '钱七' , '孙八'] 3 persons.reverse()#reverse方法用于反转列表 4 print(persons) 5 6 numbers = [28, 32, 14, 12, 53, 42] 7 numbers.sort() 8 print(numbers) 9 numbers.sort(reverse = True)#sort()用于排序,reverse=True代表降序排列 10 print(numbers)
2-5 列表的增删改查操作
列表的新增、修改、删除操作
用法 | 描述 |
list.append(新元素) | 在列表末端追加新元素 |
list.insert(索引,新元素) | 在指定索引插入新元素 |
list[索引]=新值 | 更新指定索引位置数据 |
list[起始索引:结束索引]=新列表 | 更新指定范围数据 |
list.remove(元素) | 删除指定元素 |
list.pop(索引) | 按索引删除指定元素 |
1 #列表的写操作 2 persons = ['张三', '赵六', '李四', '王五', '赵六', '钱七', '孙八'] 3 #列表的追加 4 persons.append("杨九") 5 print(persons) 6 #列表的插入 7 persons.insert(2,'刘二') 8 print(persons) 9 persons.insert(len(persons),'候大') 10 print(persons) 11 #列表的更新 12 persons[2] = "宋二" 13 print(persons) 14 #列表范围取值是“左闭右开” 15 persons[3:5] = ['王五', '李四'] 16 print(persons) 17 #列表的删除 18 #按元素内容删除 19 persons.remove("宋二") 20 print(persons) 21 #按索引值删除元素 22 persons.pop(4) 23 print(persons) 24 persons[4:7] = [] 25 print(persons)
2-6 列表的其他常用方法及使用技巧(掌握技巧,提高编程效率)
1 #其他常用方法 2 persons = ['张三', '赵六', '李四', '王五', '赵六', '钱七', '孙八'] 3 #统计出现次数 4 cnt = persons.count('赵六') 5 print(cnt) 6 #追加操作 7 #append将整个列表追加到末尾,extend则是将列表中的元素追加到原始列表末尾 8 persons.append(['杨九', '吴十']) 9 print(persons) 10 persons.extend(['杨九', '吴十']) 11 print(persons) 12 #in运算符(成员运算符)用于判断数据是否在列表中存在,存在返回True,不存在返回False 13 b = '张三'in persons 14 print(b) 15 c = '李一'in persons 16 print(c) 17 #copy函数用于复制列表 18 persons1 = persons.copy() 19 persons2 = persons 20 print(persons1) 21 #is身份运算符用于判断两个变量是否指向同一块内存 22 print(persons1 is persons) 23 print(persons2 is persons) 24 #clear用于清空列表 25 persons.clear() 26 print(persons) 27 print(persons1) 28 print(persons2)
2-7 嵌套列表
1 #多维列表(嵌套列表) 2 #[[姓名,年龄,工资],[姓名,年龄,工资],[姓名,年龄,工资]] 3 #字符串:“姓名,年龄,工资”例如:“张三,30,2000” 4 #str = "张三,30,2000" 5 #l = str.split(",") 6 #print(l) 7 emp_list = [] 8 while True: 9 info = input("请输入员工信息:") 10 if info =="": 11 print("程序结束") 12 break 13 info_list = info.split(",") 14 if len(info_list) != 3: 15 print("输入格式不正确,请重新输入") 16 continue 17 emp_list.append(info_list) 18 #print(emp_list) 19 for emp in emp_list: 20 print("{n},年龄:{a},工资:{s}".format(n=emp[0], a=emp[1], s=emp[2]))
三、字典介绍与的基本操作(重要的数据类型)
3-1 字典介绍与创建方式
列表存储数据的问题
- 列表在表达结构化数据是语义不明确
- 结构化数据是只有明确属性,明确表示规则的数据
什么是字典
- 字典(Dictionary)是python中的内置数据结构
- 字典非常适合表达结构化数据
1 { 2 '姓名':'王峰','性别':'男','绩效评级':'A','岗位':'销售','工资':1000,'话费补贴':100 3 }
字典的特点
- 字典采用键(key):值(value)形式表达数据
- 字典中key不允许重复,value允许重复
- 字典是可修改的,运行时动态调整储存空间
创建字典的两种方式
- 使用{}创建字典
- 使用dict函数创建字典
1 #字典的创建 2 #1.使用{} 3 dict1 = {}#空的字典 4 print(type(dict1)) 5 dict2 = {'name': '王峰', 'sex': "男", 6 'hiredate': '1997-10-20', 'grade': 'A', 7 'jod': '销售', 'salary': 1000, 8 'welfare': 100 9 } 10 print(dict2) 11 12 #2.利用dict函数创建字典 13 dict3 = dict(name='王峰', sex='男', hiredate='1997-10-20') 14 print(dict3) 15 dict4 = dict.fromkeys(['name', 'sex', 'hiredate', 'grade'], 'N/A') 16 print(dict4)
3-2 字典的取值操作
1 #字典的取值操作 2 employee = {'name': '王峰', 'sex': "男", 3 'hiredate': '1997-10-20', 'grade': 'A', 4 'job': '销售', 'salary': 1000, 5 'welfare': 100 6 } 7 8 #字典的取值 9 name = employee['name'] 10 print(name) 11 salary = employee['salary'] 12 print(salary) 13 print(employee.get('job')) 14 print(employee.get('dept', '其他部门')) 15 16 # in 成员运算符 17 print('name'not in employee) 18 print('dept'not in employee) 19 20 #遍历字典 21 for key in employee: 22 v = employee[key] 23 print(v) 24 for key,value in employee.items(): 25 print(key, value)
3-3 字典更新与删除操作
1 #字典的更新操作 2 employee = {'name': '王峰', 'sex': "男", 3 'hiredate': '1997-10-20', 'grade': 'A', 4 'job': '销售', 'salary': 1000, 5 'welfare': 100 6 } 7 print(employee) 8 #单个kv进行更新 9 employee['grade']='B' 10 print(employee) 11 #对多个kv进行更新 12 employee.update(salary=1200, welfare=150) 13 print(employee) 14 15 #字典的新增操作与更新操作完全相同,秉承有则更新,无则新增的原则 16 employee['dept'] = '研发部' 17 print(employee) 18 employee['dept'] = '市场部' 19 print(employee) 20 employee.update(weight=80,dept='财务部') 21 print(employee) 22 23 #与删除相关的函数 24 #1.pop删除指定的kv 25 employee.pop('weight') 26 print(employee) 27 #2.popitem删除最后一个kv 28 kv=employee.popitem() 29 kv=employee.popitem() 30 print(kv) 31 print(employee) 32 #3.clear清空字典 33 employee.clear()
3-5 字典的常用操作
字典的常用操作
- 为字典设置默认值
- 字典的视图
- 字典的格式化输出
1 emp1 = {'name': 'Jacky', 'grade': 'B'} 2 emp2 = {'name': 'Lily', 'grade': 'A'} 3 # 1.setdefault为字典设置默认值,如果某个key已存在则忽略,如果不存在则设置 4 emp1.setdefault('grade', 'C') 5 emp2.setdefault('grade', 'C') 6 # if 'grade'not in emp2: 7 # emp2['grade']='C' 8 print(emp2) 9 10 # 2.获取字典的视图 11 # (1)keys代表所获取所有的键 12 ks = emp1.keys() 13 print(ks) 14 print(type(ks)) 15 # (2)values代表获取所有的值 16 vs = emp1.values() 17 print(vs) 18 print(type(vs)) 19 # (3)items代表或去所有的键值对 20 its = emp1.items() 21 print(its) 22 print(type(its)) 23 emp1['hiredate'] = '1984-05-30' 24 print(ks) 25 print(vs) 26 print(its) 27 28 # 3.利用字典格式化字符串 29 # 老版本的字符串格式化 30 emp_str = "姓名:%(name)s,评级:%(grade)s,入职时间:%(hiredate)s"%emp1 31 print(emp_str) 32 # 新版本的字符串格式化 33 emp_str1 = "姓名:{name},评级:{grade},入职时间:{hiredate}".format_map(emp1) 34 print(emp_str1)
3-6 散列值与字典的存储原理(内存是如何存储数据)
散列值(Hash)
- 字典也称为“哈希(Hash)”,对应“散列值”
- 散列值是从任何一种数据中创建数字“指纹”
- Python中提供hash()函数生成散列值
1 # 散列值 hash() 2 h1 = hash("abc") 3 print(h1) 4 h2 = hash("bcd") 5 print(h2) 6 h3 = hash(8838183) 7 print(h3) 8 h4 = hash("abc") 9 h5 = hash("def") 10 print(h4) 11 print(h5)
字典的存储原理
1 # 处理员工数据 2 source = "7782,CLARK,MANAGER,SALES,5000$7934,MILLER,SALESMAN,SALES,3000$7369,SMITH,ANALYST,RESEARCH,2000" 3 employee_list = source.split("$") 4 print(employee_list) 5 6 # 保存所有解析后的员工信息,key是员工编号,value则是包含完整员工信息的字典 7 all_emp = {} 8 9 for i in range(0,len(employee_list)): 10 # print(i) 11 e = employee_list[i].split(",") 12 print(e) 13 14 # 创建员工字典 15 employee = {"no": e[0], "name": e[1], "job": e[2], "department": e[3], "salary": e[4]} 16 print(employee) 17 all_emp[employee['no']] = employee 18 print(all_emp) 19 20 empno=input("请输入员工编号:") 21 emp = all_emp.get(empno) 22 if empno in all_emp: 23 print("工号:{no},姓名:{name},岗位:{job},部门:{department},工资:{salary}".format_map(emp)) 24 else: 25 print("员工信息不存在")
四、课程总结
课程总结
- 列表有序存储数据,按索引值进行提取
- 字典采用键值方式存储数据,数据无序存储
- 列表
- 列表中的数据按顺序排列
- 列表有正序与倒序两种索引
- 列表可存储任意类型数据,且允许重复
- for..in语句
- for..in语句专门用于遍历列表、元组等数据结构
- 冒泡排序
- 什么是字典
- 字典是Python中的内置数据结构
- 字典非常适合表达结构化数据
- 字典的特点
- 字典采用键(key):值(value)形式表达数据
- 字典中key不允许重复,value允许重复
- 字典是可以修改的,运行时动态调整存储空间
- 创建字典的两种方式
- 使用{}创建字典
- 使用dict函数创建字典
- 散列值(hash)
- 字典也称为“哈希(Hash)”,对应“散列值”
- 散列值是从任何一种数据中创建数字“指纹”
- Python中提供了hash()函数生成散列值
- 字典的存储原理
-