Python序列的应用(九):集合以及列表、元组、字典和集合的区别

news/2024/12/15 11:14:01/文章来源:https://www.cnblogs.com/zhoutuo/p/18607781

前言:

一、集合

Python 中的集合同数学中的集合概念类似,也是用于保存不重复元素的。它有可变集合(set)和不可变集合(fozenset)两种。本节所要介绍的可变集合是无序可变序列,而不可变集合在本书中不做介绍。在形式上,集合的所有元素都放在一对{}中,两个相邻元素间使用分隔。集合最好的应用就是去掉重复元素,因为集合中的每个元素都是唯一的。

Python中的集合(set)是一个无序的、不包含重复元素的数据结构。以下是关于集合的一些基本操作:

1、集合的创建

创建集合非常简单,可以使用大括号 {} 或者 set() 函数。如果使用大括号,需要注意空集合不能使用 {} 来创建,因为空花括号在Python中是一个空字典的表示。因此,创建空集合需要使用 set() 函数。

# 使用set()函数创建集合
my_set = set()# 使用大括号创建集合
my_set = {1, 2, 3}# 创建空集合
my_set = set()

实例训练27 -创建保存学生选课信息的集合

python ={'绮梦','冷伊一','香凝','梓轩'}          #保存选择Python语言的学生姓名
C={'冷伊一','零语','梓轩','圣博',}               #保存选择C语言的学生姓名
print('选择Python语言的学生有: ',python,'\n')    #输出选择Python语言的学生姓名
print('选择C语言的学生有: ',C)                   # 输出选择C语言的学生姓名

2、集合的添加和删除

  • 添加元素:使用 add() 方法向集合中添加元素。
  • 删除元素:使用 remove() 方法删除集合中的元素,如果元素不存在会抛出 KeyError。可以使用 discard() 方法,它在元素不存在时不会抛出错误。
# 添加元素
my_set = {1, 2, 3}
my_set.add(4)  # 现在 my_set 变为 {1, 2, 3, 4}# 删除元素
my_set.remove(2)  # 移除元素 2,现在 my_set 变为 {1, 3, 4}# 安全删除元素
my_set.discard(5)  # 元素 5 不存在,但不会抛出错误

如果需要从集合中移除一个元素,并且这个元素之后不再使用,可以使用 pop() 方法,它会随机移除一个元素并返回。

# 随机移除一个元素
element = my_set.pop()  # 返回并移除一个元素

实例训练28 -学生更改选学课程

python = set(['绮梦','冷伊一','香凝','梓轩' ])         #保存选择Python语言的学生姓名
python.add('零语')                                    #添加一个元素
C = set(['冷伊一','零语','梓轩','圣博'])               #保存选择C语言的学生姓名
C.remove('零语')                                      #删除指定元素
print('选择Python语言的学生有: ',python,'\n')          #输出选择Python语言的学生姓名
print('选择C语言的学生有: ',C)                         # 输出选择C语言的学生姓名

3、集合的交集、并集和差集运算

  • 交集:使用 intersection() 方法或者 & 运算符。
  • 并集:使用 union() 方法或者 | 运算符。
  • 差集:使用 difference() 方法或者 - 运算符。
# 交集
set_a = {1, 2, 3}
set_b = {2, 3, 4}
intersection = set_a.intersection(set_b)  # 或者 set_a & set_b
# intersection 现在是 {2, 3}# 并集
union = set_a.union(set_b)  # 或者 set_a | set_b
# union 现在是 {1, 2, 3, 4}# 差集
difference = set_a.difference(set_b)  # 或者 set_a - set_b
# difference 现在是 {1}

集合的对称差集(symmetric difference)操作会找出两个集合中不共有的元素。换句话说,它会包含那些只在其中一个集合中出现的元素。集合对称差集运算,使用 symmetric_difference() 方法或者 ^ 运算符,它返回两个集合中不重复的元素。

# 对称差集
symmetric_diff = set_a.symmetric_difference(set_b)  # 或者 set_a ^ set_b
# symmetric_diff 现在是 {1, 4}

实例训练29 -对选课集合进行交集、并集和差集运算

python = set(['绮梦','冷伊一','香凝','梓轩' ])         #保存选择Python语言的学生姓名
C = set(['冷伊一','零语','梓轩','圣博'])               #保存选择C语言的学生姓名
print('选择Python语言的学生有: ',python,'\n')          #输出选择Python语言的学生姓名
print('选择C语言的学生有: ',C)                         #输出选择C语言的学生姓名
print('交集运算: ',python & C)                        #输出既选择了python语言又选择了C语言的学生
print('并集运算: ',python | C)                        #输出参与选课的全部学生姓名
print('并集运算: ',python - C)                        #输出只选择了python语言但没有选择C语言的学生

以上就是Python集合的基本操作。集合是一个强大的数据结构,适用于需要快速成员检查、消除重复项和集合运算的场景。

二、列表、元组、字典和集合的区别

列表、元组、字典和集合的区别表:

数据结构 是否可变 是否重复 是否有序 定义符号
列表(List) 可变 允许 有序 []list()
元组(Tuple) 不可变 不允许 有序 ()tuple()
字典(Dictionary) 可变 键不允许,值允许 键无序(Python 3.7+版本中保持插入顺序) {}dict()
集合(Set) 可变 不允许 无序 {}set()

这个表格简洁地总结了列表、元组、字典和集合的基本特性。

实例训练30 -输出“王者荣耀”的游戏角色,根据属性

# 王者荣耀的游戏角色列表
heroes = ["亚瑟","鲁班七号","妲己","孙悟空","貂蝉","赵云","后羿","孙尚香","诸葛亮","露娜",# ...更多英雄
]# 输出王者荣耀的游戏角色
for hero in heroes:print(hero)

实例训练31 -模拟火车订票系统

class TrainInfo:def __init__(self, train_number, destination, departure_time, arrival_time, seats_total, seats_available):self.train_number = train_number  # 车次self.destination = destination  # 目的地self.departure_time = departure_time  # 发车时间self.arrival_time = arrival_time  # 到达时间self.seats_total = seats_total  # 座位总数self.seats_available = seats_available  # 可用座位数def display_info(self):print(f"车次: {self.train_number}")print(f"目的地: {self.destination}")print(f"发车时间: {self.departure_time}")print(f"到达时间: {self.arrival_time}")print(f"座位总数: {self.seats_total}")print(f"当前可用座位数: {self.seats_available}")print('-' * 40)class TicketBookingSystem:def __init__(self):self.trains_info = {"T123": TrainInfo("T123", "北京", "08:00", "12:00", 100, 90),"T456": TrainInfo("T456", "上海", "09:00", "13:00", 120, 110),# 添加更多车次信息}def show_train_info(self, train_number):if train_number in self.trains_info:self.trains_info[train_number].display_info()else:print("没有找到该车次的信息。")# 创建订票系统实例
booking_system = TicketBookingSystem()# 用户输入车次
user_input = input("请输入车次:")
booking_system.show_train_info(user_input)

实例训练32 -电视剧的收视率排行榜

class TVShow:def __init__(self, name, rating):self.name = name  # 电视剧名称self.rating = rating  # 收视率def __str__(self):return f"{self.name}: {self.rating}%"class TVRatingsChart:def __init__(self):self.shows = []  # 存储电视剧的列表def add_show(self, show):# 添加电视剧到列表,并保持列表按收视率降序排序self.shows.append(show)self.shows.sort(key=lambda x: x.rating, reverse=True)def remove_show(self, show_name):# 移除指定的电视剧self.shows = [show for show in self.shows if show.name != show_name]def display_chart(self):# 显示收视率排行榜print("电视剧收视率排行榜:")for show in self.shows:print(show)print('-' * 40)# 创建收视率排行榜实例
ratings_chart = TVRatingsChart()# 添加一些电视剧和收视率
ratings_chart.add_show(TVShow("权力的游戏", 8.9))
ratings_chart.add_show(TVShow("老友记", 8.8))
ratings_chart.add_show(TVShow("绝命毒师", 9.5))
ratings_chart.add_show(TVShow("生活大爆炸", 8.2))# 显示排行榜
ratings_chart.display_chart()# 移除一个电视剧
ratings_chart.remove_show("生活大爆炸")# 再次显示排行榜
print("移除《生活大爆炸》后的排行榜:")
ratings_chart.display_chart()

实例训练33 -统计需要取快递人员的名单

class ExpressDelivery:def __init__(self):self.recipients = []  # 存储需要取快递的人员名单def add_recipient(self, name):# 添加需要取快递的人员if name not in self.recipients:self.recipients.append(name)print(f"{name} 已添加到取快递名单。")else:print(f"{name} 已经在名单中。")def remove_recipient(self, name):# 从名单中移除人员if name in self.recipients:self.recipients.remove(name)print(f"{name} 已从取快递名单中移除。")else:print(f"{name} 不在名单中。")def list_recipients(self):# 显示所有需要取快递的人员名单if self.recipients:print("需要取快递的人员名单:")for i, name in enumerate(self.recipients, 1):print(f"{i}. {name}")else:print("目前没有需要取快递的人员。")# 创建快递派送系统实例
delivery_system = ExpressDelivery()# 添加需要取快递的人员
delivery_system.add_recipient("张三")
delivery_system.add_recipient("李四")
delivery_system.add_recipient("王五")# 显示需要取快递的人员名单
delivery_system.list_recipients()# 尝试重复添加人员
delivery_system.add_recipient("张三")# 移除一个人员
delivery_system.remove_recipient("李四")# 再次显示需要取快递的人员名单
delivery_system.list_recipients()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853186.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery鼠标拖动旋转DOM元素插件

Propeller.js是一款jQuery鼠标拖动旋转DOM元素插件。通过该插件,可以使用鼠标拖动旋转页面中的任意DOM元素。使用方法 通过npm安装插件。npm install Propeller HTML结构 例如要拖动旋转一张图片。<img src="demo.jpg" id="img"> 初始化插件 作为jq…

js消息通知框、对话框、确认框和Loading插件

Notiflix是一款js消息通知框、对话框、确认框和Loading插件。Notiflix通过简单的设置,就可生成非常漂亮的s消息通知框、对话框、确认框和Loading效果。在线预览 下载使用方法 在页面中引入下面的文件。<link rel="stylesheet" href="css/notiflix-1.3.0.mi…

人工智能大语言模型起源篇,低秩微调(LoRA)

上一篇: 《规模法则(Scaling Law)与参数效率的提高》 序言:您在找工作时会不会经常听到LoRA微调,这项技术的来源就是这里了。 (12)Hu、Shen、Wallis、Allen-Zhu、Li、L Wang、S Wang 和 Chen 于2021年发表的《LoRA: Low-Rank Adaptation of Large Language Models》,htt…

群晖Lets Encrypt证书申请

注意本文时效性:2024.9.23 引言 为了保证SSL证书的权威性和安全性,Lets Encrypt 会验证您对域名的控制权。 申请 Lets Encrypt 证书有以下的验证控制权的方式:Web验证:通过在http的有权威的目录下创建一个验证文件以验证对服务器的控制权 Dns验证:通过在 DNS Record 中添加…

《计算机基础与程序设计》第十二周学习总结

学期(如2024-2025-1) 学号(如:20241300) 《计算机基础与程序设计》第十二周学习总结 作业信息这个作业属于哪个课程 <班级的链接> 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 <作业要求的链接> 2024-2025-1计算机基础与程序设计第十二周作业)这个作…

读数据保护:工作负载的可恢复性14备份和恢复数据库

备份和恢复数据库1. 给采用传统方式交付的数据库制作备份 1.1. 某个数据库是新还是旧,跟该数据库是不是传统数据库没有必然的联系,真正的决定因素在于,这个数据库是不是运行在你所管理的服务器或虚拟机里1.1.1. 如果是,那就可以归入按照传统模型来交付的数据库1.1.2. 如果不…

2024北京多校联训游记

乡下人进城——开了眼了Day \(-\infty\) NOIP考的十分炸裂,一道题都没做出来,结果下来 \(40min\) 就切掉了第 \(2\) 题???这时 \(hfu\) 通知有意向的同学可以去参加在北京的多校联训。经过一番思想斗争后,还是决定去参加一下,毕竟技多不压身,且基础知识也整理的差不多了…

[CSP2020-J4] 直播获奖

题面 题目描述 NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为 $w%$,即当前排名前 $w%$ 的选手的最低成绩就是即时的分数线。 更具体地,若当前已评出了 $p$ 个选手的成绩,则当前计划获奖人数为 $\max(1, \…

LLM大模型推理优化示例分析

Large Transformer Model Inference Optimization 人工智能芯片与自动驾驶

遥感全景锐化的内容自适应非局部卷积

遥感全景锐化的内容自适应非局部卷积目前,基于机器学习的遥感泛变方法发展迅速。然而,现有的pansharpening方法往往没有充分利用非局部空间中的区分区域信息,从而限制了方法的有效性,并导致冗余的学习参数。介绍了一种所谓的内容自适应非局部卷积(CANConv),这是一种专为…

渗透测试-前端加密分析之AES

本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AES(CBC) 和 AES(ECB) 加密。前言 本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AE…

python内置函数permutations

what permutations是python的itertools模块的一个函数,可以用来求可迭代对象的全排列 itertools.permutations(iterable, r)iterable:可迭代对象 r:全排列的长度 return:tuple后面r的作用解释一下,加入iterable中元素有n个,r=m,就相当于先在n中选m个,再对m个进行全排列…