Python程序设计——元组、集合和字典

news2024/11/13 10:25:09

可以使用元组存储一个固定的元素列表,使用集合存储和快速访问不重复的元素、使用字典存储键值对并使用这些关键字来快速访问元素。

一、元组

        元组跟列表类似,但是元组中的元素是固定的;也就是说,一旦一个元组被创建,就无法对元组中的元素进行添加、删除、替换或重新排序

        如果在应用中不应该对列表中的内容进行修改,那么就可以使用元组来防止元素被意外添加、删除或替换。除了元组的元素是固定的以外,元组与列表很像。进一步讲,由于Python的实现,元组比列表的效率更高

        可以通过将元素用一对括号括起来来创建一个元组。这些元素用逗号分隔。可以创建一个空元组或从一个列表创建一个元组, 如下面的例子所示。

t1 = () # Create an empty tuple
t2 = (1,3,5) # Create a tuple with three el ements
# Create a tuple from a list
t3 = tup1e([2 * x for x in range(1, 5)])

        也可以从一个字符串创建一个元组。字符串中的每个字就变成了元组的一个元素。例如:

# Create a tuple from a string
t4 = tuple("abac") # t4 is ['a'. 'b', 'a'. 'c']

        元组是序列。在表10-1中针对序列的常见操作也可以用在元组上。可以在元组上使用len、min、max和sum函数。可以使用一个for循环遍历一个元组的所有元素,并使用一个下标运算符来访问元组中对应的元素或元素段。可以使用in和not in运算符来判断一个元素是否在元组中,并使用比较运算符来对元组中的元素进行比较。

“元组的元素是固定的”是指不能给一个元组添加、删除和替换元素以及打乱元组中的元素

注意:一个元组包含了一个固定的元素列表。一个元组里的一个个体元素可能是易变的。例如,下面的代码创建了一个圆的元组(第2行),并改变第一个圆的半径为30(第3行)。

>>> from CircleFromGeometricObject import Circle
>>> circles = (Circle(2), Circle(4), Circle(7))
>>> circles[0].setRadius(30)
>>> circles[0].getRadius()
>>> 30
>>>

        在这个例子中,元组中每一个元素都是一个圆对象。尽管不能添加、删除或替换元组中的圆对象,但是可以改变一个圆的半径,因为一个圆对象是可变的。如果一个元组包含不可变的对象,那么这个元组被称为不可变的。例如,一个数字元组或一个字符串元组是不可变的。

二、集合

关键点:集合与列表类似,可以使用它们存储一个元素集合。但是,不同于列表,集合中的元素是不重复且不是按任何特定顺序放置的。

如果你的应用程序不关心元素的顺序,使用一个集合来存储元素比使用列表效率更高。
 

2.1、创建集合

        可以通过将元素用一对花括号( { })括起来以创建一个元素集合。集合中的元素用逗号分隔。可以创建一个空集,或者从一个列表或一个元组创建一个集合,如下面的例子所示。

s1 = set() # Create an empty set
s2 = {1, 3, 5} # Create a set with three e lements
s3 = set((1, 3, 5)) # Create a set from a tuple
# Create a set from a list
s4 = set([x * 2 for x in range(1, 10)])

        同样的,可以通过使用语法list(set)或tuple(set)从集合创建一个列表或一个元组。

        也可以从一个字符串创建一个集合。 字符串中的每个字符就成为集合中的一个元素。

例如:

# Create a set from a string
s5 = set("abac") # s5 is {'a','b','c'}

注意:尽管字符a在字符串中出现了两次,但在集合中只出现了一次,因为一个集合中不存储重复的元素

        一个集合可以包含类型相同或不同的元素。例如: s= {1,2,3,"one" ,"two" ,"three"}是一个包含数字和字符串的集合。集合中的每个元素必须是哈希的( hashable)。Python 中的每一个对象都有一个哈希值,而且如果在对象的生命周期里对象的哈希值从未改变,那么这个对象是哈希的。目前所介绍的所有类型对象除了列表之外都是哈希的。

2.2、操作和访问集合

        可以通过使用add(e)或remove(e)方法来对一个集合添加或删除元素。可以使用函数len、min、 max和sum对集合操作,可以使用for循环遍历一个集合中的所有元素。

        可以使用in或not in运算符来判断一个元素是否在一个集合当中

注意:如果删除一个集合中不存在的元素,remove(e) 方法将抛出一个KeyError异常

2.3、 子集和超集

如果集合s1中的每个元素都在集合s2中,则称s1是s2的子集。可以使用s1.issubset(s2)方法来判断s1是否是s2的子集,如下面代码所示。

>>> s1={1,2,4}
>>> s2={1,4,5,2,6}
>>> s1.issubset(s2) # s1 is a subset of s2
True
>>>

如果一个集合s2中的元素同样都在集合s1中,则称集合s1是集合s2的超集。可以使用s1.issuperset(s2)方法来判断s1是否是s2的超集,如下面代码所示。

>>> s1={1,2,4}
>>> s2={1,4,5,2,6}
>>> s2.issuperset(s1) # s2 is a superset of s1
True
>>>

2.4、相等性测试

        可以使用运算符==!=来检测两个集合是否包含相同的元素。例如:

>>> s1={1,2,4}
>>> s2={1,4,2}
>>> s1==s2
True
>>> s1 != s2
False
>>>

在这个例子中,尽管s1和s2的元素顺序不同,但是这两个集合包含相同的元素。

注意:使用传统的比较运算符(>、>=、<=和<)来比较集合毫无意义,因为集合中的元素并没有排序。但是,当这些操作符用在集合上时有着特殊的含义:

  • 如果s1是s2的一个真子集,则s1<s2返回True。
  • 如果s1是s2的一个子集,则s1<=s2返回True。
  • 如果s1是s2的一个真超集,则s1>s2返回True。
  • 如果s1是s2的一个超集,则s1>=s2返回True。

        注意:如果s1是s2的一个真子集,那么s1的每个元素同样也都在s2中,但是s2中至少存在一个不在s1中的元素。如果s1是s2的一个真子集,那么s2是s1的一个真超集

2.5、集合运算

Python提供了求并集、交集、差集和对称差集合的运算方法。

两个集合的并集是一个包含这两个集合所有元素的集合。可以使用union方法或者 运算符来实现这个操作。例如:

>>> s1={1,2,4}
>>> s2={1,3,5}
>>> s1.union(s2)
{1,2,3,4,5}
>>>
>>> s1 | s2
{1,2,3,4,5}
>>>

两个集合的交集是-一个包含了两个集合共同的元素的集合。可以使用intersection方法或者&运算符来实现这个操作。例如:

>>> s1={1, 2, 4}
>>> s2={1, 3, 5}
>>> s1.intersection(s2)
{1}
>>>
>>> s1 & s2
{1}
>>>

set1和set2之间的差集是一个包含了出现在set1但不出现在set2的元素的集合。可以使用difference方法或 - 运算符来实现这个操作。例如:

>>> s1={1,2,4}
>>> s2={1,3,5}
>>> sl.difference(s2)
{2,4}
>>>
>>> s1 - s2
{2,4}
>>

        两个集合之间的对称差(或者称为异或)集合是一个包含了除它们共同元素之外所有在这两个集合之中的元素。可以使用symmertric_difference 方法或 ^ 运算符来实现这个操作。
例如:

>>> s1={1, 2, 4}
>>> s2={1, 3, 5}
>>> s1.symmetric_difference(s2)
{2,3,4,5}
>>>
>>> s1 ^ s2
{2,3,4,5}
>>>

注意:这些set方法都返回一个结果集合,但是它们并不会改变这些集合中的元素

三、比较集合和列表的性能

关键点:对于in和not in运算符和remove方法,集合比列表的效率更高。

        列表中的元素可以使用下标运算符来访问。但是,集合并不支持下标运算符,因为集合中的元素是无序的。使用for循环遍历集合中的所有元素。

四、字典

关键点:一个字典是一个存储键值对集合的容器对象。它通过使用关键字实现快速获取、删除和更新值。

        假设程序需要存储“No-Fly” 表中有关恐怖分子的详细信息。字典就是这个任务的一种有效的数据结构。一个字典是按照关键字存储值的集合。这些关键字很像下标运算符。在一个列表中,下标是整数。在一个字典中,关键字必须是一个可哈希对象。一个字典不能包含有重复的关键字。每个关键字都对应着一个值。一个关键字和它对应的值形成存储在字典中的一个条目(输入域),如图所示。

        这种数据结构被称为“字典",因为它与词典很类似,在这里,单词就相当于关键字而这些单词的详细定义就是相应的值。一个字典也被认为是一张图,它将每个关键字和一个值相匹配。

4.1、 创建一个字典

        可以通过一对花括号({ })将这些条目括起来以创建一个字典。每一个条目都由一个关键字,然后跟着一个冒号,再跟着一个值组成。每一个条目都用逗号分隔。例如,下面语句:

students = {"111-34-3434":"John", "132-56-6290":"Peter"}

        创建一个具有两个条目的字典,如图14-1b所示。字典中的每一个条目的形式都是key:value。第一个条目的关键字是111-34-3434,它对应的值是John。关键字必须是可哈希类型,例如:数字和字符串。而值可以是任意类型。可以使用下面的语法来创建一个空字典。

students = {} # Create an empty dictionary

注意: Python 使用花括号创建集合和字典。 语法{ }被用来表示一个空字典。 为了创建一个空集合,使用set()

4.2、 添加、修改和获取值

为了添加一个条目到字典中,使用语法:

dictionaryName[key] = value

例如:

students["234-56-9010"] = "Susan"

        如果这个关键字已经在字典中存在,前面的语法将替换该关键字对应的值。为了获取一个值,只要使用dictionaryName[key]编写一个表达式即可。如果该关键字在字典中,那么返回这个关键字对应的值。否则,抛出一个KeyError异常。

4.3、删除条目

为了从字典删除一个条目,使用语法:

del dictionaryName[key]

例如:

del students["234-56-9010"]

        这条语句从字典中删除关键字为234-56-9010的对应条目。如果字典中不存在该关键字,那么抛出一个KeyError异常。

4.4、循环条目

        可以使用一个for循环来遍历字典中所有的关键字。例如:

1 >>> students = {"111-34-3434": "John","132-56-6290":"Peter"}
2 >>> for key in students :
3 ...     print(key + ":" + str(students[key]))
4 ...
5 "111- 34- 3434":"John"
6 "132- 56-6290":"Peter" 
7 >>>

        for循环对字典students中的关键字进行迭代(第2行)。students[key] 返回关键字key对应的值(第3行)。

4.5、 len 函数

可以使用len(dictionary)来获得一个字典中条目的数目。例如:

1 >>> students = {"111-34-3434":"John", "132-56- 6290" :"Peter"}
2 >>> len(students)
3 2
4 >>>

在第2行,len(students)返回字典students中条目的数目。

4.6、检测一个关键字是否在字典中

可以使用in或not in运算符来判断一个关键字是否在一个字典当中。例如:

1 >>> students = {"111-34-3434":"John", "132-56- 6290":"Peter"}
2 >>> "111-34-3434" in s tudents
3 True
4 >>> "999-34-3434" in students
5 False
6 >>>

        在第2行,"111-34-3434" in students 将检测关键字111-34-3434 是否在字典students 中。

4.7、相等性检测

可以使用运算符==和!=来检测两个字典是否包含同样的条目。例如:

>>> d1 = {"red":41, "blue":3}
>>> d2 = {"b1ue":3, "red":41}
>>> d1 == d2
True
>>> d1 != d2
False

在这个例子中,不管这些条目在字典中的顺序,d1和d2包含有相同的条目。

注意:不能使用比较运算符(>、>=、<=和<)对字典进行比较,因为字典中的条目是没有顺序的。

4.8、字典方法

        Python中的字典类是dict

        get(key)方法除了当关键字key不在字典中时返回None而不是抛出一个异常,其他都与dictionaryName[key]类似。pop(key) 方法与del dictionaryName[key]类似。

五、总结

  • 一个元组是一个固定列表。不能对元组中的元素进行添加、删除或替换。
  • 由于元组是一个序列,所以序列的常用操作也可以用于元组。
  • 尽管不能对元组进行元素的添加、删除或者替换,但是如果该元素是可变的话你可以改变这个单独元素的内容。
  • 如果元组的所有元素都是不可变的,那么这个元组是不可变的。
  • 集合就像是用来存储元素集的列表。但是,不同于列表,集合中的元素是不可重复的而且是没有以特定顺序放置的。
  • 可以使用add方法向一个集合添加元素,使用remove方法从一个集合删除元素。
  • 函数len. min、 max和sum都可用在集合上。
  • 可以使用一个for循环来遍历集合中的元素。
  • 可以使用issubset或issuperset方法来检测一个集合是否是另一个集合的子集或父集,并使用|、&、-和^运算符来实现求集合的并集、交集、差集和对称差集。
  • 在判断一个元素是否存在于集合或列表中,以及从集合或列表删除元素时,集合都比列表的效率更高。
  • 字典可用于存储键值对。可以使用一个关键字来获取一个值。这些关键字就像是一个下标操作符。
  • 在一个列表中,这些下标都是整数。在一个字典中,这些关键字可以是任意的可哈希对象,例如:数字和字符串。
  • 可以使用dictionaryName[key]来获取字典中某个给定关键字对应的值,并使用dictionaryName[key]=value来添加或修改字典中的一个条目。
  • 可以使用del dictionaryName[key]删除给定关键字对应的条目。
  • 可以使用一个for循环来遍历一个字典中的所有关键字。
  • 可以使用len函数返回字典的所有条目数。
  • 可以使用in和not in运算符来确定一个关键字是否在字典当中,使用==和!=操作符来检测两个字典是否相同。
  • 可以对字典使用keys(、values()、 iterms()、 clear()、 get(key)、 pop(key) 和popitem()方法。

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

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

相关文章

部署mysql到win10电脑上

中间出现了很多问题&#xff0c; 记录一下 我这边是去官网下载的 &#xff0c;链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 我这边选了不是最新版本的MySQL&#xff0c;因为第一次安装8.1.0版本的&#xff0c;死活运行不起来&#xff0c;直接卸载安重装了&#x…

Python web实战之Django的国际化和本地化详解

关键词&#xff1a;Django、Python、Web开发、国际化&#xff08;i18n&#xff09;、本地化&#xff08;l10n&#xff09; 今天我要和大家分享一下 Python Web 开发中的一个重要话题——Django 的国际化和本地化。 1. 国际化和本地化 你有没有想过如何让你的网站在全球范围内…

ssm蜀都天香酒楼网站设计与实现

ssm蜀都天香酒楼的网站设计与实现028 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首…

DAY06_SpringBoot—简介基础配置yaml多环境开发配置整合第三方技术

目录 一 SpringBoot简介1. 入门案例问题导入1.1 入门案例开发步骤1.2 基于SpringBoot官网创建项目1.3 SpringBoot项目快速启动 2. SpringBoot概述问题导入2.1 起步依赖2.2 辅助功能 二 基础配置1. 配置文件格式问题导入1.1 修改服务器端口1.2 自动提示功能消失解决方案1.3 Spri…

7. CSS(四)

目录 一、浮动 &#xff08;一&#xff09;传统网页布局的三种方式 &#xff08;二&#xff09;标准流&#xff08;普通流/文档流&#xff09; &#xff08;三&#xff09;为什么需要浮动&#xff1f; &#xff08;四&#xff09;什么是浮动 &#xff08;五&#xff09;浮…

【BASH】回顾与知识点梳理(三十二)

【BASH】回顾与知识点梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux当初设计的目标&#xff1a;避免资源的误用传统的文件权限与账号关系&#xff1a;自主式访问控制, DAC以政策规则订定特定进程读取特定文件&#xff1a;委任式访问控制, MAC 32.2 SELinux 的运作模式安…

[Go版]算法通关村第十二关青铜——不简单的字符串转换问题

目录 题目&#xff1a;转换成小写字母思路分析&#xff1a;大写字母ASCII码 32 小写字母ASCII码Go代码Go代码-优化: 大写字母ASCII码 | 32 小写字母ASCII码 题目&#xff1a;字符串转换整数&#xff08;atoi&#xff09;思路分析&#xff1a;去除首部空格 明确正负 读取数…

使用Java实现拼音模糊搜索功能(支持拼音、首字母、多音字、谐音字、汉字、阿拉伯数字)

&#x1f34e; 介绍 Java实现的简单的工具类支持(拼音, 多音字, 谐音字, 汉字, 阿拉伯数字) 对标阿里钉钉的上方搜索栏实现的 &#x1f349; 对应依赖 <!-- https://mvnrepository.com/artifact/com.github.open-android/pinyin4j --> <dependency><groupId&g…

视觉大模型综述

万字长文带你全面解读视觉大模型细数近期涌现的优秀视觉大模型工作https://mp.weixin.qq.com/s/jLQaguLejx9zXjZjaJWx-Q深入了解视觉语言模型 - 知乎人类学习本质上是多模态 (multi-modal) 的&#xff0c;因为联合利用多种感官有助于我们更好地理解和分析新信息。理所当然地&am…

uniapp 顶部头部样式

<u-navbartitle"商城":safeAreaInsetTop"true"><view slot"left"><image src"/static/logo.png" mode"" class"u-w-50 u-h-50"></image></view></u-navbar>

TIA博途_通过EXCEL快速给PLC程序段添加注释信息的方法示例

通过EXCEL快速给PLC程序段添加注释信息的方法示例 如下图所示,以OB1为例,正常情况下,我们可以在博途中直接输入各个程序段的注释信息, 但是如果程序段较多的话,逐个输入的话效率不高,此时可以参考下面这种通过EXCEL进行快速添加的方法。 如下图所示,选中某个OB或FC、FB块…

蓝牙资讯|2023年Q2蓝牙耳机市场报告发布,苹果依然占据第一

市场调查机构 Canalys 发布最新报告&#xff0c;2023 年第二季度全球个人智能音频设备&#xff08;包括 TWS, 无线头戴&#xff0c;无线颈挂&#xff09;下滑了 2%&#xff0c;出货量达到 9568 万部&#xff0c;基本追平去年同期。其中&#xff0c;真无线耳机&#xff08;TWS&a…

出现ffmpeg.dll丢失的修复方法分享,教你快速修复ffmpeg.dll文件

当你使用或尝试运行与FFmpeg相关的应用程序时&#xff0c;可能会遇到一个常见的问题&#xff0c;ffmpeg.dll文件丢失。这个动态链接库文件对于正常运行FFmpeg应用程序至关重要。在本文中&#xff0c;我们将详细探讨为什么会出现ffmpeg.dll丢失的情况&#xff0c;并提供一些修复…

互联网账号被封禁解决办法,以qq为例

百度搜索&#xff1a;互联网信息服务投诉平台 电脑端浏览器&#xff1a;打开 ts.isc.org.cn 推荐使用360极速浏览器 谷歌浏览器 提交完成后&#xff0c;将投诉码保存&#xff0c;可以在“查询评价”处用投诉码查询进度

什么是可视化编程?为什么它如此重要?

可视化编程&#xff0c;又叫可视化程序设计&#xff0c;一直以来就是备受讨论的“热门技术”。一方面&#xff0c;程序员抵触它&#xff0c;觉得它不如用代码开发。另一方面&#xff0c;对于产品经理等稍微懂点开发的业余人员&#xff0c;它确实能提供价值。所以&#xff0c;它…

第十课:Qt 字符编码和中文乱码相关问题

功能描述&#xff1a;最全的 Qt 字符编码相关知识以及中文乱码的原因与解决办法 一、字符编码种类 ASCII 码 美国人对信息交流的编码&#xff0c;包括 26 个字母&#xff08;大小写&#xff09;、数字和标点符号等&#xff0c;用一个字节&#xff08;8 位&#xff09;表示这些…

【Matter】基于Ubuntu 22.04搭建matter开发环境:chip-tool 配网之 matter-over-wifi

前言 主要是记录一下学习过程&#xff0c;梳理下思路&#xff0c;抛转~ 官方的开发环境&#xff0c;基于Linux版本&#xff0c;官方的环境是基于树莓派环境的&#xff0c;原理其实也比较明了&#xff0c;目的也比较明确&#xff0c;就是达到Linux 主机和wifi 路由在同一局域网…

四天两次盛会,西凤以品质和信仰深度诠释凤香价值

上周&#xff0c;西凤无疑是白酒圈的热点。 8月8日&#xff0c;在中国酿酒原料及品质安全研究院科技创新论坛暨西凤酒项目成果发布会上&#xff0c;《凤香型酒用高粱品种培育及抗逆高产技术集成示范》与《西凤酒原产地地质地理环境特征研究》研究成果被重磅发布。 8月11日&…

爬虫逆向实战(十二)--某交易所登录

一、数据接口分析 主页地址&#xff1a;某交易所 1、抓包 通过抓包可以发现登录是通过表单提交的 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块&#xff0c;可以发现有两个加密参数password和execution 请求头是否加密&#xff1f; 无响应是…