2025年3月29日 星期六 甲辰(龙)年 月廿八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python精选08集(字典、元组、集合)

时间:04-25来源:作者:点击数:51

作业回顾

homework01

  • name_list = ["张三", "李四", "王五", "王小二", "张三", "张三"]
  • # len(length 长度) 函数可以统计列表中元素的总数
  • list_len = len(name_list)
  • print("列表中包含"+str(list_len)+"个元素")
  • # count 方法可以统计列表中某一个数据出现的次数
  • count = name_list.count("张三")
  • print("张三出现了"+str(count)+"次")
  • # 从列表中删除第一次出现的数据,如果数据不存在,程序会报错
  • name_list.remove("张三")

homework02

  • name_list = ["zhangsan", "lisi", "wangwu", "wangxiaoer"]
  • num_list = [6, 8, 4, 1, 10]
  • # 升序
  • name_list.sort() # 按首字母排序
  • num_list.sort() # 从小到大
  • # 降序
  • name_list.sort(reverse=True)
  • num_list.sort(reverse=True)
  • # # 逆序(反转)
  • print(name_list.reverse())
  • print(num_list.reverse())
  • for item in name_list:
  • print(item)
  • for i in num_list:
  • print(i)

一、综合练习(列表外传)

1、案例需求

  • list01 = [1,2,3,4,5,6,7,8,9,10] 删除列表中所有奇数
  • 要求倒序删除

非常重要!!!

先举个栗子:实现列表正向删除操作

  • list01 = [1, 2, 3, 4, 5, 6, 7, 8]
  • # 列表正向的弊端
  • # 首先判断1<5,将1删除,之后列表变成[2,3,4,5,6,7,8],即且数据整体向前迁移一位
  • # 第二步判断的不是2,而是3,3< 5将3删除,之后列表变成[2,4,5,6,7,8]
  • # 第三步判断的不是4,而是5,5=5,不删除,输出5
  • for i in list01:
  • if i<4:
  • list01.remove(i)
  • print(list01)

原始列表

list01 1 2 3 4 5 6 7 8
索引 0 1 2 3 4 5 6 7

首先判断1<5,将1删除,之后列表变成[2,3,4,5,6,7,8],即且数据整体向前迁移一位

list01 2 3 4 5 6 7 8
索引 0 1 2 3 4 5 6

第二步判断的不是2,而是3,3< 5将3删除,之后列表变成[2,4,5,6,7,8]

list01 2 4 5 6 7 8
索引 0 1 2 3 4 5

第三步判断的不是4,而是5,5=5,不删除,输出5

断点操作教学

在这里插入图片描述

以上要细品、一定要细品!!

既然正向不行了,那我们就倒叙删除吧

  • list01 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • # 删除元素方法有两种:
  • # 1、用倒序的方法删除,防止值自动补位
  • for i in range(len(list01)-1,-1,-1):
  • if list01[i]%2:
  • # 删除语法一:
  • # list01.pop(i)
  • # 删除语法二:
  • del list01[i]
  • print(list01)
  • # 2、正向通过索引删除值(enumerate比较高级暂时未学到此知识点【慎用】)
  • for index,value in enumerate(list01):
  • if list01[index]%2:
  • # 删除语法一:
  • list01.pop(index)
  • # 删除语法二:
  • # del list01[index]
  • # 删除语法三:
  • # list01.remove(value)
  • print(list01)

2、案例需求

  • 求斐波那契数列:输入长度求具体数列
  • 从第三项开始,每一项都等于前两项之和
  • 1,1,2,3,5,8,…
  • lenght = int(input("请输入斐波那契数列长度:"))
  • # 如长度为6
  • fib= [1,1]
  • for __ in range(lenght - 2):
  • # 当前元素 = 最后两个元素之和
  • element = fib[-2] + fib[-1]
  • fib.append(element)
  • print(fib)

3、案例需求

  • list01 = [2, 9, 40, 16, 57, 38]
  • 求列表最大值
  • 思路:从首位开始对比后一位,如果满足则替换,直至对比到最后
  • list01 = [2, 9, 40, 16, 57, 38]
  • max_value = list01[0]
  • for i in range(1, len(list01)):
  • if max_value < list01[i]:
  • max_value = list01[i]
  • print("最大值:",max_value)

4、列表深拷贝与浅拷贝

浅拷贝:是在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程。

深拷贝:复制整个依懒的变量。

二、元组

1、元组的定义

  • Tuple(元组)与列表类似,不同之处在于元组的元素不能修改
    • 元组表示多个元素组成的序列
    • 元组Python开发中,有特定的应用场景
  • 用于存储一串 信息数据之间使用,分隔
  • 元组用()定义
  • 元组的索引0开始
    • 索引就是数据在元组中的位置编号
  • info_tuple = ("zhangsan", 18, 1.75)

① 创建空元组

  • info_tuple = ()

② 元组中只包含一个元素时,需要在元素后面添加逗号

  • info_tuple = (50, )
在这里插入图片描述

2、元组常用操作

  • ipython3中定义一个元组,例如:message = ()
  • 输入message .按下TAB键,ipython会提示元组能够使用的函数如下:
  • info.count info.index

有关元组常用操作可以参照上图练习

3、 循环遍历

  • 取值就是从元组中获取存储在指定位置的数据
  • 遍历就是从头到尾依次元组中获取数据
  • # for 循环内部使用的变量 in 元组
  • for item in info:
  • 循环内部针对元组元素进行操作
  • print(item)

案例演示

  • # 通过索引
  • t03=(1,2,3,4)
  • 正向
  • for index in range(len(t03)):
  • print(t03[index],end="") #1234
  • print("")
  • 反向
  • for index in range(len(t03)-1,-1,-1):
  • print(t03[index],end="") #4321
  • Python中,可以使用for循环遍历所有非数字型类型的变量:列表元组字典以及字符串
  • 提示:在实际开发中,除非能够确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多

4、 应用场景

  • 尽管可以使用for in遍历元组
  • 但是在开发中,更多的应用场景是:
    • 函数的 参数 和 返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
      • 有关函数的参数 和 返回值,在后续函数高级给大家介绍
    • 格式字符串格式化字符串后面的()本质上就是一个元组
    • 让列表不可以被修改,以保护数据安全
  • info = ("zhangsan", 18)
  • print("%s 的年龄是 %d" % info)

5、元组和列表之间的转换

  • 使用list函数可以把元组转换成列表
  • list(元组)
  • 使用tuple函数可以把列表转换成元组
  • tuple(列表)

案例演示

  • list01 = [25, 89, 32, 15, 23, 66]
  • tuple01 = (25, 89, 32, 15, 23, 66)
  • print("元组转列表",list(tuple01))
  • print("列表转元组",tuple(list01))

输出显示

在这里插入图片描述

6、元组与列表(区分)

元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素。

元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小。

列表(可变):预留空间

元组(只读):按需分配

三、字典

1、字典的定义

  • dictionary(字典) 是除列表以外Python之中最灵活的数据类型
  • 字典同样可以用来存储多个数据
    • 通常用于存储描述一个物体的相关信息
  • 和列表的区别
    • 列表有序的对象集合
    • 字典无序的对象集合
  • 字典用{}定义
  • 字典使用键值对存储数据,键值对之间使用,分隔
    • key是索引
    • value是数据
    • 之间使用:分隔
    • 键必须是唯一的(键不能相同,值可以相同)
    • 可以取任何数据类型,但只能使用字符串数字元组
  • xiaoming = {"name": "小明",
  • "age": 18,
  • "gender": True,
  • "height": 1.75}
在这里插入图片描述

2、 字典常用操作

  • ipython3中定义一个字典,例如:xiaoming = {}
  • 输入xiaoming.按下TAB键,ipython会提示字典能够使用的函数如下:
  • In [1]: xiaoming.
  • xiaoming.clear xiaoming.items xiaoming.setdefault
  • xiaoming.copy xiaoming.keys xiaoming.update
  • xiaoming.fromkeys xiaoming.pop xiaoming.values
  • xiaoming.get xiaoming.popitem

有关字典常用操作可以参照上图练习

案例演示

  • dict01 = {1001:"王宝强",1002:"马蓉",1005:"宋喆"}
  • # 1. 添加
  • # --通过键-值
  • dict01[1003] = "文章"
  • # 2. 修改(如果key存在,则为修改,不存在则为添加)
  • dict01[1002] = "伊利"
  • # 3. 删除
  • # 如果key不存在则报错
  • if 1001 in dict01:
  • del dict01[1001]
  • # 4. 查询
  • # key/循环
  • print(dict01[1005])

3、 循环遍历

  • 遍历就是依次字典中获取所有键值对
  • # for 循环内部使用的 `key 的变量` in 字典
  • for k in xiaoming:
  • print("%s: %s" % (k, xiaoming[k]))

提示:在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多

案例演示

  • dict01 = {1001:"王宝强",1002:"马蓉",1005:"宋喆"}
  • # -- 获取所有key # 1001 1002 1005
  • for key in dict01:
  • print(key)
  • # --获取所有value # 王宝强 马蓉 宋喆
  • for value in dict01.values():
  • print(value)
  • # --获取所有key - value # 1001 王宝强 1002 马蓉 1005 宋喆
  • for key,value in dict01.items():
  • print(key)
  • print(value)

4 、应用场景

  • 尽管可以使用for in遍历字典
  • 但是在开发中,更多的应用场景是:
    • 使用多个键值对,存储描述一个物体的相关信息—— 描述更复杂的数据信息
    • 多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
  • card_list = [{"name": "张三",
  • "qq": "12345",
  • "phone": "110"},
  • {"name": "李四",
  • "qq": "54321",
  • "phone": "10086"}
  • ]

5、列表与字典转换

  • 列表(格式) --> 字典
  • 格式:[(k,v),(k,v)]
  • 字典 --> 列表(只保留key)

案例演示

  • stu01 = {1001:"王宝强",1002:"马蓉",1005:"宋喆"}
  • stu02 = dict(["宝强",(125,"马小荣"),[234,"宋喆"]])
  • list01 = list(stu01)
  • print(stu02)
  • print(list01)

输出显示

在这里插入图片描述

6、字典与列表(区分)

  • 都是可变容器。
  • 获取元素方式不同,列表用索引,字典用键。
  • 字典的插入,删除,修改的速度快于列表。
  • 列表的存储是有序的,字典的存储是无序的。

四、集合(set)

1、定义

  • 由一系列不重复的不可变类型变量组成的可变散列容器。
  • 相当于只有键没有值的字典(键则是集合的数据)。

2、基础操作

① 创建空集合:

集合名 = set()

集合名 = set(可迭代对象)

② 创建具有默认值集合:

集合名 = {1, 2, 3}

集合名 = set(可迭代对象)

添加元素:集合名.add(元素)

update()方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

案例演示

  • set2={"a", 2, "b", 3, "d"}
  • set1 = {"a", 2, "b", 3, "e"}
  • set2.update(set1)
  • print(set2)#{2, 3, 'd', 'b', 'a', 'e'}

③ 删除元素:

  • 集合名.discard(元素)
  • 集合名.remove(元素)

④ 随机移除元素

  • 集合名.pop()

⑤ 移除集合中的所有元素:

  • 集合名.clear()#清除

⑥ 拷贝一个集合:copy()

  • 集合名.copy()

3、运算

1 交集&:返回共同元素。

  • s1 = {1, 2, 3}
  • s2 = {2, 3, 4}
  • s3 = s1 & s2 # {2, 3}

2 并集 |:返回不重复元素

  • s1 = {1, 2, 3}
  • s2 = {2, 3, 4}
  • s3 = s1 | s2 # {1, 2, 3, 4}

3 补集-:返回只属于其中之一的元素

  • s1 = {1, 2, 3}
  • s2 = {2, 3, 4}
  • s1 - s2 # {1} 属于s1但不属于s2
  • s2 - s1 # {4} 属于s2但不属于s1

4 补集^:返回不同的的元素

  • s1 = {1, 2, 3}
  • s2 = {2, 3, 4}
  • s3 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)
在这里插入图片描述

子集<:判断一个集合的所有元素是否完全在另一个集合中

超集>:判断一个集合是否具有另一个集合的所有元素

  • s1 = {1, 2, 3}
  • s2 = {2, 3}
  • s2 < s1 # True
  • s1 > s2 # True

相同或不同== !=:判断集合中的所有元素是否和另一个集合相同。

  • s1 = {1, 2, 3}
  • s2 = {3, 2, 1}
  • s1 == s2 # True
  • s1 != s2 # False

子集或相同,超集或相同 <= >=

4、集合推导式

定义:使用简易方法,将可迭代对象转换为集合。

语法:

  • {表达式 for 变量 in 可迭代对象}
  • {表达式 for 变量 in 可迭代对象 if 条件}

固定集合 frozenset

定义:不可变的集合。

作用:固定集合可以作为字典的键,还可以作为集合的值。

基础操作:创建固定集合:frozenset(可迭代对象)

运算:等同于set

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门