【人生苦短,我学 Python】(5)集合数据类型(set、frozenset)

2023-12-11 12:45

本文主要是介绍【人生苦短,我学 Python】(5)集合数据类型(set、frozenset),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 简述 / 前言
  • 1. set数据类型(集合)
    • 1.1 创建集合对象
      • 1.1.1 set
      • 1.1.2 frozenset
    • 1.2 访问集合元素
    • 1.3 集合的长度、最大值、最小值、元素和
    • 1.4 集合支持的运算
    • 1.5 集合对象方法
  • 文章传送门

简述 / 前言

前面主要了解了 Python 的语言基础,现在我们来了解 Python 给我们提供了哪些数据类型,以及如何使用这些数据类型。

  • Python语言中,一切皆为对象,而每个对象都属于某个数据类型;
  • Python的数据类型包括内置的数据类型、模块中定义的数据类型和用户自定义的类型;
    • 数值数据类型:int、bool、float、complex;
    • 序列数据类型:不可变(str、tuple、bytes)和可变(list、bytearray);
    • 集合数据类型:set、frozenset;
    • 字典数据类型:dict。例如:{1: “one”, 2: “two”};;
    • NoneType、NotImplementedType和EllipsisType。

上一篇文章我们介绍了序列数据类型(str、tuple、list、bytes和bytearray),这篇我们介绍集合数据类型(set、frozenset)

1. set数据类型(集合)

  1. 集合的特点:
    • 集合是无序的,不能通过数字进行索引。
    • 集合的元素不能重复出现
  2. 集合的应用:
    • 去除列表中的重复元素
    • 求两个列表的相同元素(交集)
    • 求两个列表的不同元素(差集)
  3. 集合可分为两类:
    • 可变集合(set):可以添加和删除元素
    • 不可变集合(frozenset):不允许添加和删除元素

集合可以通过 set() 或者 {} 方法创建!

1.1 创建集合对象

1.1.1 set

>>> s1 = set('hello')					# set()方法
>>> s1
{'e', 'o', 'l', 'h'}
>>> type(s1)
<class 'set'>
>>> s2 = {'h', 'e', 'l', 'l', 'o'}		# {}方法
>>> s2
{'e', 'o', 'l', 'h'}
>>> type(s2)
<class 'set'>
>>> s3 = set(['h', 'e', 'l', 'l', 'o'])	# set()方法【如果要创建多个元素时用列表(list)括起来】
>>> s3
{'e', 'o', 'l', 'h'}
>>> type(s3)
<class 'set'>
>>> s4 = {}		# 虽然{}可以创建集合,但是空的{}不代表集合,而是之后会介绍的字典(dict)!!!
>>> s4
{}
>>> type(s4)	# 类型是字典,不是集合
<class 'dict'>
>>> s5 = set()	# 空集合
>>> s5
set()
>>> type(s5)
<class 'set'>
>>> s6 = set('h', 'e', 'l', 'l', 'o')	# 【易错点】创建多元素集合时要用列表括起来,即:set(['h', 'e', 'l', 'l', 'o'])
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: set expected at most 1 argument, got 5

1.1.2 frozenset

通过类型构造器:frozenset() 创建集合。

  • 创建后的集合不能改变集合元素。

例如,创建一个星期的英文缩写的不可变集合:

>>> s7 = frozenset(('MON','TUE','WED','THU','FRI','SAT','SUN'))
>>> s7
frozenset({'SAT', 'FRI', 'TUE', 'SUN', 'WED', 'MON', 'THU'})
>>> type(s7)
<class 'frozenset'>

1.2 访问集合元素

由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用 in、not in 来访问或判断集合元素。

>>> 'WED' in s7
True
>>> 'WWW' in s7
False
>>> for day in s7:
...     print(day, end=" ")
...
SAT FRI TUE SUN WED MON THU

1.3 集合的长度、最大值、最小值、元素和

通过内置函数 len()max()min()sum(),可以获取集合的长度、元素最大值、元素最小值、元素之和。

>>> s8 = {1,2,3,4,5,6,7,8,9}
>>> len(s8)
9
>>> max(s8)
9
>>> min(s8)
1
>>> sum(s8)
45

1.4 集合支持的运算

运算含意
x in <集合>检测x是否在集合中
s1|s2并集
s1&s2交集
s1-s2差集
s1^s2异或集,求s1与s2中相异元素
s1|=s2将s2的元素并入s1
s1==s2判断集合是否相等
s1<=s2判断s1是否是s2的子集
s1<s2判断s1是否是s2的真子集
s1>=s2判断s1是否是s2的超集
s1>s2判断s1是否是s2的真超集
>>> s1 = {1, 2, 3, 4}
>>> s1
{1, 2, 3, 4}
>>> s2 = {3, 5, 6}
>>> s2
{3, 5, 6}
>>> s3 = {2, 3}
>>> s3
{2, 3}
>>> 3 in s1		# 3在集合s1中
True
>>> 5 in s1		# 5不在集合s1中
False
>>> s1 | s2		# s1和s2的并集
{1, 2, 3, 4, 5, 6}
>>> s1 & s2		# s1和s2的交集
{3}
>>> s1 - s2		# s1和s2的差集
{1, 2, 4}
>>> s1 ^ s2		# s1和s2的异或集
{1, 2, 4, 5, 6}
>>> s1			# 上述集合运算不改变原集合
{1, 2, 3, 4}
>>> s1 |= s2	# 将s2并入到s1中
>>> s1			# 此并入操作会修改原集合
{1, 2, 3, 4, 5, 6}
>>> s1 == s2	# 判断两个集合是否相等
False
>>> s2 <= s1	# s2是s1的子集
True
>>> s2 < s1		# s2是s1的真子集
True
>>> s1 >= s2	# s1是s2的超集
True
>>> s1 > s2		# s1是s2的真超集
True

:判断两个集合是否相等,只需判断其中包含的集合元素是否一致,与顺序无关

1.5 集合对象方法

方法含意
s1.union(s2 )s1|s2,返回一个新的集合对象
s1.difference(s2)s1-s2,返回一个新的集合对象
s1.intersection(s2)s1&s2,返回一个新的集合对象
s1.issubset(s2)s1<=s2
s1.issuperset(s2)s1>=s2
s1.update(s2)将s2的元素并入s1【*】
s1.add (x)增加元素x到s1【*】
s1.remove(x)从s1移除x,x不存在报错【*】
s1.clear ()清空s1【*】
s1.copy()复制s1,返回一个新的集合对象

:打星号*的方法是set集合独有的方法,不打星号的方法是两种集合都有的方法。

文章传送门

上一篇文章:【人生苦短,我学 Python】(4)Python 常用内置数据类型 II —— 序列数据类型(str、tuple、list、bytes和bytearray)
下一篇文章:

这篇关于【人生苦短,我学 Python】(5)集合数据类型(set、frozenset)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480733

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核