python入门笔记5-集合与字典

元组

Python 的元组(tuple,简写为tup)与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号​()​,列表使用方括号​[]​。

好处就是节省内存。

集合

  • 集合是无序、不重复元素的容器。

  • 用 {} 或 set() 创建,但空集合必须用 set(){} 会创建空字典)。

  • 元素必须是不可变类型(如数字、字符串、元组),不能是列表或字典。

s1 = {1, 2, 3}            # 直接定义集合
print("s1",s1)
s2 = set([1, 2, 3, 2])    # 从列表转集合(自动去重):{1, 2, 3}
print("s2",s2)
s3 = set("hello")         # 从字符串转集合:{'h', 'e', 'l', 'o'}
print("s3",s3)
empty_set = set()          # 空集合(注意:不是 {},那是字典)
print("empty_set",empty_set)

s1 {1, 2, 3}
s2 {1, 2, 3}
s3 {'l', 'o', 'e', 'h'}
empty_set set()

添加删除元素

#添加元素
s = {1, 2}
s.add(3)          # 添加单个元素 → {1, 2, 3}
s.update([4, 5])  # 添加多个元素 → {1, 2, 3, 4, 5}
print("s",s)
#删除元素
s.remove(3)       # 删除元素(元素不存在则报错 KeyError)
print("s 删除元素",s)
s.discard(6)      # 删除元素(元素不存在不报错)
print("s 删除不存在元素",s)
s.pop()           # 随机删除并返回一个元素(集合无序)
print("s 随机删除元素",s)
s.clear()         # 清空集合 → set()
print("s 清空",s)

s {1, 2, 3, 4, 5}
s 删除元素 {1, 2, 4, 5}
s 删除不存在元素 {1, 2, 4, 5}
s 随机删除元素 {2, 4, 5}
s 清空 set()

集合运算

a = set('abracadabra')
b = set('alacazam')print("a",a)
print("b",b)print("a集合中b没有的元素",a-b)
print("并集:",a|b)
print("交集",a&b)
print("不同时包含于a和b的元素",a^b)

a {'a', 'b', 'c', 'd', 'r'}
b {'a', 'm', 'z', 'c', 'l'}
a集合中b没有的元素 {'d', 'b', 'r'}
并集: {'a', 'm', 'b', 'z', 'c', 'd', 'l', 'r'}
交集 {'a', 'c'}
不同时包含于a和b的元素 {'d', 'l', 'r', 'm', 'b', 'z'}

其他方法

#成员检测
s = {1, 2, 3}
print("2 in s:",2 in s)   # 输出 True
#子集/超集判断
a = {1, 2}
b = {1, 2, 3}
print('a.issubset(b):',a.issubset(b))    # True(a 是 b 的子集)
print('b.issuperset(a):',b.issuperset(a))  # True(b 是 a 的超集)
#集合推导式
s = {x for x in range(10) if x % 2 == 0}  # {0, 2, 4, 6, 8}
print("s:",s)

2 in s: True
a.issubset(b): True
b.issuperset(a): True
s: {0, 2, 4, 6, 8}


总结:

  • 核心特性:无序、不重复、高效成员检测。

  • 适用场景:去重、集合运算(如交集、并集)、快速查找元素。

字典

在Python3中字典(dictionary ,简写为dict)是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 (​key=>value​) 对用冒号 (:) 分割,每个对之间用逗号 (,) 分割,整个字典包括在花括号 ({}​) 中 ,格式如下:

dict = {key1 : value1, key2 : value2 }
键必须是唯一的,不可变,如字符串,数字或元组。

# 直接定义字典
d1 = {"name": "Alice", "age": 25}
print("d1",d1)
d2 = dict(name="Bob", age=30)        # 通过关键字参数创建
print("d2",d2)
# 空字典
empty_dict = {}                      # 或 dict()# 从键值对列表创建
d3 = dict([("id", 1001), ("city", "Paris")])  # {'id': 1001, 'city': 'Paris'}
print("d3",d3)

d1 {'name': 'Alice', 'age': 25}
d2 {'name': 'Bob', 'age': 30}
d3 {'id': 1001, 'city': 'Paris'}

访问

d = {"name": "Alice", "age": 25}
print(d["name"])        # 直接访问 → "Alice"(键不存在会报 KeyError)
print(d.get("age"))     # 安全访问 → 25(键不存在返回 None)
print(d.get("gender", "N/A"))  # 指定默认值 → "N/A"

添加删除

#添加
d1 = {"name": "Alice"}
d1["age"] = 25           # 添加新键值对 → {"name": "Alice", "age": 25}
print('after add,d1:',d1)
d1["name"] = "Bob"       # 修改现有键的值 → {"name": "Bob", "age": 25}
print('after update,d1:',d1)
#删除
del d1["age"]
print('after del,d1:',d1)
value = d1.pop("name")## 删除键 "name" 并返回值 → value
print("value:",value)

after add,d1: {'name': 'Alice', 'age': 25}
after update,d1: {'name': 'Bob', 'age': 25}
after del,d1: {'name': 'Bob'}
value: Bob


常用方法

#成员检测
d2 = {"a": 1, "b": 2}
print('"a" in d2:',"a" in d2)     # 检查键是否存在 → True
print('1 in d2.values():',1 in d2.values())  # 检查值是否存在 → True
#遍历字典
price = {'包子': 12, '油条': 2,'豆腐脑': 5}
for key in price:           # 遍历键print(key, price[key])
# for key, value in price.items():  # 同时遍历键值对
#     print(key, value)

"a" in d2: True
1 in d2.values(): True
包子 12
油条 2
豆腐脑 5

应用:

#统计词频
text = "apple banana apple orange banana"
words = text.split()
frequency = {}
for word in words:frequency[word] = frequency.get(word, 0) + 1
print('frequency',frequency)
#配置
config = {"debug_mode": True,"max_connections": 10,"allowed_ports": [80, 443, 8080]
}
print("allowed_ports",config["allowed_ports"])

frequency {'apple': 2, 'banana': 2, 'orange': 1}
allowed_ports [80, 443, 8080]

总结

  • 核心特性:键值对映射、快速查找、键不可变。

  • 适用场景:数据关联存储(如JSON)、配置管理、缓存、快速查找数据。

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

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

相关文章

DevOps自动化部署详解:从理念到实践

在软件开发日益快速迭代的今天,如何以高效、稳定且可重复的方式将代码变更从开发环境自动部署到生产环境成为企业竞争的重要因素。DevOps 正是在这一背景下应运而生,它打破开发、测试、运维之间的壁垒,通过自动化工具和流程,实现持…

Python 将PPT幻灯片和形状转换为多种图片格式(JPG, PNG, BMP, SVG, TIFF)

目录 安装所需的库 使用Python将PowerPoint幻灯片转换为JPG、PNG和BMP图片 按实际尺寸将幻灯片保存为图片 按自定义尺寸将幻灯片保存为图片 使用Python将PowerPoint幻灯片转换为SVG图片 使用Python将PowerPoint幻灯片转换为多页TIFF图片 使用Python将PowerPoint幻灯片中…

【设计模式】【创建型模式】工厂方法模式(Factory Methods)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…

基于STM32的智能工业设备健康监测系统

1. 引言 工业设备故障导致的生产停滞问题日益突出,传统人工巡检方式效率低且难以捕捉早期隐患。本文设计了一款基于STM32的智能工业设备健康监测系统,通过振动分析、温度监测与声纹识别技术,实现设备状态实时评估、故障预警与维护决策支持&a…

第4章:在LangChain中如何实现响应式流(Response Streaming)

文章介绍了 LangChain4j 中的 响应流式传输(Response Streaming) 功能,展示了如何通过低层次的 LLM(大语言模型)API 实现逐个令牌(token)的流式响应。 响应式流(Response Streaming&…

旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)

旧手机热点无法提供ipv6解决方法 手机:荣耀8x 系统版本: EMUI 8 网络:移动流量卡 解决方案 设置-》无线和网络-》移动网络-》接入点名称(APN)-》cmiot 修改 APN协议: IPv4/IPv6 修改 APN漫游协议: IPv4/IPv6

Memcached和redis对比了解

1.介绍 Memcached 是一个高性能、分布式的内存缓存系统,用于加速动态 Web 应用程序,减少数据库负载。它的核心功能是将数据存储在内存中,并通过基于键值对(Key-Value)的方式快速读取数据。 Redis 和 Memcached 选择建…

mysql之如何获知版本

你可以通过在 MySQL 命令行客户端执行简单的 SQL 查询来获取 MySQL 的版本信息。以下是获取 MySQL 版本的常见方法: 使用 SELECT VERSION(); 查询: SELECT VERSION();执行这个查询后,MySQL 会返回一个字符串,其中包含了 MySQL 服…

SOME/IP--协议英文原文讲解9

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.1.4 T…

汽车免拆诊断案例 | 2010 款路虎揽胜车空调偶尔出风异常

故障现象  一辆2010款路虎揽胜车,搭载5.0 L发动机,累计行驶里程约为16万km。车主反映,接通空调开关后,有时出风忽大忽小,有时不出风,有时要等2 min左右才出风;有时两三天出现一次,…

【SQL】SQL多表查询

多表查询案例联系点击此处 🎄概念 一般我们说的多表查询都涉及外键和父子表之间的关系。比如一对多:一般前面指的是父表后面指的是子表。 ⭐分类 一对多(多对一) 多对多 一对一 ⭐一对多 📢案例:部门与员工的关系 📢关系&…

HTML/CSS中后代选择器

1.作用:选中指定元素中,符合要求的后代元素. 2.语法:选择器1 选择器2 选择器3 ...... 选择器n(使用空格隔开) 3.举例: /* 选中ul中的所有li */ul li{color: red;}/* 选中类名为subject元素中的所有li */.subject li{color: blue;}/* 选中类名为subject元素中的所有类名为f…

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…

GPT-SoVITS更新V3 win整合包

GPT-SoVITS 是由社区开发者联合打造的开源语音生成框架,其创新性地融合了GPT语言模型与SoVITS(Singing Voice Inference and Timbre Synthesis)语音合成技术,实现了仅需5秒语音样本即可生成高保真目标音色的突破。该项目凭借其开箱…

mac os设置jdk版本

打开环境变量配置文件 sudo vim ~/.bash_profile 设置不同的jdk版本路径 # 设置JAVA_HOME为jdk17路径 export JAVA_HOME$(/usr/libexec/java_home -v 17)# 设置JAVA_HOME为jdk8路径 export JAVA_HOME$(/usr/libexec/java_home -v 1.8) 设置环境变量 # 将jdk加入到环境变量…

【Github每日推荐】-- 2024 年项目汇总

1、AI 技术 项目简述OmniParser一款基于纯视觉的 GUI 智能体,能够准确识别界面上可交互图标以及理解截图中各元素语义,实现自动化界面交互场景,如自动化测试、自动化操作等。ChatTTS一款专门为对话场景设计的语音生成模型,主要用…

集合 数据结构 泛型

文章目录 1.Collection集合1.1数组和集合的区别【理解】1.2集合类体系结构【理解】1.3Collection 集合概述和使用【应用】内部类匿名内部类Lambda表达式 1.4Collection集合的遍历【应用】1.5增强for循环【应用】 2.List集合2.1List集合的概述和特点【记忆】2.2List集合的特有方…

Webpack,Vite打包的理解

Webpack 和 Vite 都是现代前端开发中常用的构建工具,用于打包和优化项目代码。尽管它们的目标相似,但在设计理念、工作方式和适用场景上存在显著差异。 Webpack Webpack 是一个模块打包工具,主要用于将多个模块(如 JavaScript、…

[uniapp] 实现扫码功能,含APP、h5、小程序

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

Spring Boot 示例项目:从零开始构建 Web 应用

一、项目概述 本文档将指导您通过一个示例项目,了解如何使用 Spring Boot 框架构建一个简单的 Web 应用程序。该项目涵盖了从数据模型定义到控制器、服务层以及数据访问层的完整开发流程,帮助您快速掌握 Spring Boot 的基本使用方法。 二、项目结构 1. 项目模块 本示例项…