本文最后更新于 2025-01-10T22:20:33+08:00
第四部分 序列 列表(list) 列表是Python中的一个对象 对象(object)就是内存中专门用来存储数据的一块区域,之前我们学习的对象,像数值,它只能保存一个单一的数据 列表中可以保存多个有序的数据,列表是用来存储对象的对象 列表的使用: 1.列表的创建 2.操作列表中的数据
列表的介绍 类似于C中的数组,但是更灵活
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 my_list = [] my_list = [10 ] my_list = [10 ,20 ,30 ,40 ,50 ] my_list = [10 ,'hello' ,True ,None ,[1 ,2 ,3 ],print ] my_list = [10 ,20 ,30 ,40 ,50 ] print (my_list[4 ]) print (my_list[5 ]) IndexError: list index out of range print (len (my_list))
列表的切片 切片指从现有列表中,获取一个子列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 stus = ['孙悟空' ,'猪八戒' ,'沙和尚' ,'唐僧' ,'蜘蛛精' ,'白骨精' ] print (stus[-2 ]) print (stus[1 :]) print (stus[:3 ]) print (stus[:]) print (stus) print (stus[0 :5 :3 ]) print (stus[::0 ]) ValueError: slice step cannot be zeroprint (stus[::-1 ])
列表的通用操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 my_list = [1 ,2 ,3 ] + [4 ,5 ,6 ] my_list = [1 ,2 ,3 ] * 5 stus = ['孙悟空' ,'猪八戒' ,'沙和尚' ,'唐僧' ,'蜘蛛精' ,'白骨精' ,'沙和尚' ,'沙和尚' ] arr = [10 ,1 ,2 ,5 ,100 ,77 ]print (stus.count('牛魔王' ))
序列(sequence) 序列是Python中最基本的一种数据结构 (就是一种顺序表)
数据结构指计算机中数据存储的方式 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引), 并且序列中的数据会按照添加的顺序来分配索引
序列的分类: 可变序列(序列中的元素可以改变): 列表(list) 不可变序列(序列中的元素不能改变): 字符串(str) 元组(tuple)
前面部分所写的所有操作都是序列的通用操作,是列表,字符串,元组三个文件中的操作
列表的修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 stus = ['孙悟空' ,'猪八戒' ,'沙和尚' ,'唐僧' ,'蜘蛛精' ,'白骨精' ] stus[0 ] = 'sunwukong' stus[2 ] = '哈哈' del stus[2 ] stus = ['孙悟空' ,'猪八戒' ,'沙和尚' ,'唐僧' ,'蜘蛛精' ,'白骨精' ] s = 'hello' s = list (s)print (s)
列表的方法(通过方法修改列表) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 stus = ['孙悟空' ,'猪八戒' ,'沙和尚' ,'唐僧' ] stus.append('唐僧' ) stus.insert(2 ,'唐僧' ) stus.extend(['唐僧' ,'白骨精' ]) stus += ['唐僧' ,'白骨精' ] stus.clear() result = stus.pop(2 ) result = stus.pop() print ('result =' ,result) stus.remove('猪八戒' ) stus.reverse() my_list = list ('asnbdnbasdabd' ) my_list = [10 ,1 ,20 ,3 ,4 ,5 ,0 ,-2 ]print ('修改前' ,my_list) my_list.sort(reverse=True )print ('修改后' ,my_list)
range()函数 range()是一个函数,可以用来生成一个自然数的序列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 r = range (5 ) r = range (0 ,10 ,2 ) r = range (10 ,0 ,-1 ) print (list (r))for i in range (30 ): print (i) for s in 'hello' : print (s)
列表的遍历 遍历列表,指的就是将列表中的所有元素取出来
遍历列表(通过索引遍历)
1 2 3 4 5 6 7 stus = ['孙悟空' ,'猪八戒' ,'沙和尚' ,'唐僧' ,'白骨精' ,'蜘蛛精' ]
通过while循环来遍历列表
通过for循环来遍历列表
1 2 3 4 5 6 7 8 9 for s in stus : print (s)
EMS 练习 Employee Manager System 员工管理系统 代码需求:
1 2 3 4 5 6 7 8 9 10 11 12 - 做命令行版本的员工管理系统 - 功能: 四个: 1.查询 - 显示当前系统当中的所有员工 2.添加 - 将员工添加到当前系统中 3.删除 - 将员工从系统当中删除 4.退出 - 退出系统 - 员工信息要保存到哪里? 列表,在系统中应该有一个列表,专门用来保存所有员工信息的
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 print ('-' *20 , '欢迎使用员工管理系统' , '-' *20 ) emps = ['孙悟空\t18\t男\t花果山' ,'猪八戒\t28\t男\t高老庄' ]while True : print ('请选择要做的操作:' ) print ('\t1.查询员工' ) print ('\t2.添加员工' ) print ('\t3.删除员工' ) print ('\t4.退出系统' ) user_choose = input ('请选择[1-4]:' ) print ('-' *62 ) if user_choose == '1' : print ('\t序号\t姓名\t年龄\t性别\t住址' ) n = 1 for emp in emps : print (f'\t{n} \t{emp} ' ) n += 1 elif user_choose == '2' : emp_name = input ('请输入员工的姓名:' ) emp_age = input ('请输入员工的年龄:' ) emp_gender = input ('请输入员工的性别:' ) emp_address = input ('请输入员工的住址:' ) emp = f'{emp_name} \t{emp_age} \t{emp_gender} \t{emp_address} ' print ('以下员工将被添加到系统中' ) print ('-' *62 ) print ('姓名\t年龄\t性别\t住址' ) print (emp) print ('-' *62 ) user_confirm = input ('是否确认该操作[Y/N]:' ) if user_confirm == 'y' or user_confirm == 'yes' : emps.append(emp) print ('添加成功!' ) else : print ('添加已取消!' ) elif user_choose == '3' : del_num = int (input ('请输入要删除的员工的序号:' )) if 0 < del_num <= len (emps) : del_i = del_num - 1 print ('以下员工将被删除' ) print ('-' *62 ) print ('\t序号\t姓名\t年龄\t性别\t住址' ) print (f'\t{del_num} \t{emps[del_i]} ' ) print ('-' *62 ) user_confirm = input ('该操作不可恢复,是否确认[Y/N]:' ) if user_confirm == 'y' or user_confirm == 'yes' : emps.pop(del_i) print ('员工已被删除!' ) else : print ('操作已取消!' ) else : print ('您的输入有误,请重新操作!' ) elif user_choose == '4' : print ('欢迎使用!再见!' ) input ('点击回车键退出!' ) break else : print ('您的输入有误,请重新选择!' ) print ('-' *62 )
元组 元组 tuple(除了不可变,剩下的和序列差不多) 元组是一个不可变的序列 ,它的操作的方式基本上和列表是一致的,所以你在操作元组时,就把元组当成是一个不可变的列表就ok了 一般当我们希望数据不改变时,就使用元组,其余情况都使用列表.
创建元组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 my_tuple = () my_tuple = (1 ,2 ,3 ,4 ,5 ) my_tuple = 10 ,20 ,30 ,40 my_tuple = 40 , my_tuple = 10 , 20 , 30 , 40
元组的解包(解构)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 a,b,c,d = my_tuple a = 100 b = 300 a , b = b , a my_tuple = 10 , 20 , 30 , 40 a , b , *c = my_tuple a , *b , c = my_tuple *a , b , c = my_tuple a , b , *c = [1 ,2 ,3 ,4 ,5 ,6 ,7 ] a , b , *c = 'hello world' print ('a =' ,a)print ('b =' ,b)print ('c =' ,c) 上面三行的输出: a = h b = e c = ['l' , 'l' , 'o' , ' ' , 'w' , 'o' , 'r' , 'l' , 'd' ]
可变对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - 每个对象中都保存了三个数据: id (标识) type (类型) value(值) - 列表就是一个可变对象 a = [1 ,2 ,3 ] - a[0 ] = 10 (改对象)(像指针一样) - 这个操作是在通过变量去修改对象的值 - 这种操作不会改变变量所指向的对象 - 当我们去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现 - a = [4 ,5 ,6 ] (改变量) - 这个操作是在给变量重新赋值 - 这种操作会改变变量所指向的对象 - 为一个变量重新赋值时,不会影响其他的变量 - 一般只有在为变量赋值时才是修改变量,其余的都是修改对象
== != is is not的区别 == != 比较的是对象的值是否相等 is is not 比较的是对象的id是否相等(比较两个对象是否是同一个对象)
1 2 3 4 5 6 a = [1 ,2 ,3 ] b = [1 ,2 ,3 ]print (a,b)print (id (a),id (b))print (a == b) print (a is b)
字典(dict) 字典属于一种新的数据结构,称为映射(mapping) 字典的作用和列表类似,都是用来存储对象的容器。列表存储数据的性能很好,但是查询数据的性能的很差。在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素。
在查询元素时,字典的效率是非常快的 在字典中可以保存多个对象,每个对象都会有一个唯一的名字
1. 这个唯一的名字,我们称其为键(key),通过key可以快速的查询value
2. 这个对象,我们称其为值(value)
3. 所以字典,我们也称为叫做键值对(key-value)结构
4. 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 d = {} d = {'name' :'孙悟空' , 'age' :18 , 'gender' :'男' , 'name' :'sunwukong' } print (d['name' ],d['age' ],d['gender' ])
字典的使用 创建字典: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 d = dict (name='孙悟空' ,age=18 ,gender='男' ) d = dict ([('name' ,'孙悟空' ),('age' ,18 )]) d = dict (name='孙悟空' ,age=18 ,gender='男' )
获取字典中键值对的个数
检查字典中是否包含指定的键
获取字典中的值 1 2 3 4 5 6 7 8 9 10 11 12 13 print (d['age' ]) n = 'name' print (d[n]) print (d.get('name' )) print (d.get('hello' ,'默认值' ))
修改字典 添加键值对 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 d['name' ] = 'sunwukong' d['address' ] = '花果山' result = d.setdefault('name' ,'猪八戒' ) result = d.setdefault('hello' ,'猪八戒' ) d = {'a' :1 ,'b' :2 ,'c' :3 } d2 = {'d' :4 ,'e' :5 ,'f' :6 , 'a' :7 } d.update(d2)
修改字典 删除键值对 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 d = {'a' :1 ,'b' :2 ,'c' :3 }del d['a' ]del d['b' ] d.popitem() result = d.popitem() result = d.pop('d' ) result = d.pop('z' ,'这是默认值' ) d.clear()
修改字典 浅复制 1 2 3 4 5 6 7 copy() d = {'a' :1 ,'b' :2 ,'c' :3 } d2 = d.copy()
例子:(没太理解——2022.4.11)
1 2 3 4 5 6 7 8 9 10 例子: d = {'a' :{'name' :'孙悟空' ,'age' :18 },'b' :2 ,'c' :3 } d2 = d.copy() d2['a' ]['name' ] = '猪八戒' print ('d = ' ,d , id (d))print ('d2 = ' ,d2 , id (d2)) 运行结果: d = {'a' : {'name' : '猪八戒' , 'age' : 18 }, 'b' : 2 , 'c' : 3 } 2080115470648 d2 = {'a' : {'name' : '猪八戒' , 'age' : 18 }, 'b' : 2 , 'c' : 3 } 2080115471128
修改字典 遍历字典 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 d = {'name' :'孙悟空' ,'age' :18 ,'gender' :'男' } for k in d.keys() : print (k , d[k]) for v in d.values(): print (v) print (d.items())for k,v in d.items() : print (k , '=' , v)
集合(set) 集合和列表非常相似
不同点:
集合中只能存储不可变对象
合中存储的对象是无序(不是按照元素的插入顺序保存)不能通过索引操作集合
集合中不能出现重复的元素
创建集合 1 2 3 4 5 6 7 8 9 10 s = {10 ,3 ,5 ,1 ,2 ,1 ,2 ,3 ,1 ,1 ,1 ,1 } s = set () s = set ([1 ,2 ,3 ,4 ,5 ,1 ,1 ,2 ,3 ,4 ,5 ]) s = set ('hello' ) s = set ({'a' :1 ,'b' :2 ,'c' :3 })
集合的操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 s = {'a' , 'b' , 1 , 2 , 3 , 1 } s.add(10 ) s.add(30 ) s2 = set ('hello' ) s.update(s2) s.update((10 ,20 ,30 ,40 ,50 )) s.update({10 :'ab' ,20 :'bc' ,100 :'cd' ,1000 :'ef' }) s.remove(100 ) s.remove(1000 ) s.clear() s2 = s.copy()
集合的运算 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 s = {1 ,2 ,3 ,4 ,5 } s2 = {3 ,4 ,5 ,6 ,7 } result = s & s2 result = s | s2 result = s - s2 result = s ^ s2 a = {1 ,2 ,3 } b = {1 ,2 ,3 ,4 ,5 } result = a <= b result = {1 ,2 ,3 } <= {1 ,2 ,3 } result = {1 ,2 ,3 ,4 ,5 } <= {1 ,2 ,3 } result = {1 ,2 ,3 } < {1 ,2 ,3 } result = {1 ,2 ,3 } < {1 ,2 ,3 ,4 ,5 } print ('result =' ,result)