Python入门教程+项目实战-13.1节-集合基础概念

news/2025/2/19 14:49:39/

目录

13.1.1 理解集合类型

13.1.2 集合的类型名

13.1.3 集合的定义

13.1.4 在循环中遍历集合

13.1.5 集合的元素输出顺序

13.1.6 知识要点

13.1.7 系统学习python


13.1.1 理解集合类型

集合类型与字典类型非常接近,Python中的集合类型也是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。

集合与字典一样,底层实现基于哈希表:

# 定义一个集合变量stars
stars = {"陈法蓉", "陈德蓉"}

在上文代码中定义了一个集合类型变量stars, 在stars中包含两个元素,集合中的元素相当于字典中的键名,也就是说,Python中的集合类型是键名的数据集合。既然Python中的集合是键名的数据集合,那么集合中的元素必须是静态的、可哈希的数据类型,我们可以在交互模式中进行验证:

>>> stars ={"陈法蓉", "陈德容", ["李嘉欣"]}

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

TypeError: unhashable type: 'list'

由输出可知,在定义集合类型的变量时,由于元素中包含可变的数据类型(列表),Python解释器抛出了类型错误的异常信息。

13.1.2 集合的类型名

在交互模式中通过type来输出集合的类型名:

>>> stars = {"陈法蓉", "陈德蓉"}

>>> type(stars)

<class 'set'>

从输出可知,字典的类型名为set。集合中的键名同样是唯一的,对列表进行显式类型转换以后,可以自动去掉重复的元素:

# __desc__ = 使用集合类型进行显式转换,对列表中的元素进行去重# 在列表中可以包含重复的元素
stars = ["陈法蓉", "陈德蓉", "陈法蓉", "陈德蓉"]stars = set(stars)
# stars的输出为{'陈德容', '陈法蓉'}

13.1.3 集合的定义

对集合进行定义,主要有对象定义法和直接定义法。

(1) 对象定义法

集合的类型名是set,可以直接在交互模式中执行help(set)来查找set的定义及用法:

class set(object)

|  set() -> new empty set object

|  set(iterable) -> new set object

|

|  Build an unordered collection of unique elements.

从交互模式的输出中,可看到如下两个定义集合的构造方法:

(1) set()

(2) set(iterable)

1.set()

使用set()构造一个空的集合。

代码实例:

# __desc__ = 通过set()构造一个空的集合# 定义一个空的集合
stars = set()# 空值在条件判断中会自动转换为布尔类型False
if stars:print("there are stars in stars")
else:print("there is no star in stars")

2. set(iterable)

这里的iterable表示的是可迭代对象,可迭代对象中的元素必须是不可变的数据类型,否则会抛出类型错误的异常信息。迄今为止学过的可迭代对象:字符串,列表,元组,字典,集合

代码实例:

# __desc__ = 通过可迭代对象来构造集合# 1.通过字符串类型来构造集合
alphabet = set("abcdefg")
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}# 2.通过列表类型来构造集合
alphabet = set(['e', 'c', 'b', 'a', 'g', 'd', 'f'])
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}# 3.通过元组类型来构造集合
alphabet = set(('e', 'c', 'b', 'a', 'g', 'd', 'f'))
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}# 4.通过字典类型来构造集合
alphabet = set({'e': 1, 'c': 1, 'b': 1, 'a': 1, 'g': 1, 'd': 1, 'f': 1})# 使用字典类型进行构造时,以字典中的键名作为集合的键名
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}# 5.通过集合类型来构造集合
alphabet = set({'e', 'c', 'b', 'a', 'g', 'd', 'f'})
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}

可迭代对象中的元素必须是不可变的数据类型,否则会抛出类型错误的异常信息:

>>> stars = ["陈法蓉", "陈德容", ["陈法蓉", "陈德容"]]

>>> stars = set(stars)

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

TypeError: unhashable type: 'list'

简单数据类型,字符串,元组都是不可变的数据类型,列表,字典,集合等是可变的数据类型。

(2) 直接定义法

直接定义法是指直接通过集合的别名符号{}来进行定义。在{}中,键名以英文逗号进行分隔。

代码实例:

# __desc__ = 直接通过{}来构造集合# 不能使用{}来构造一个空的集合,Python解释器会将其解析为字典类型
stars = {}
# stars是一个空的字典# 构造一个有值的集合
stars = {"陈法蓉", "陈德蓉"}

13.1.4 在循环中遍历集合

集合是一种可迭代对象,可以在for循环中遍历集合的键名。

遍历集合的for循环结构:

for name in set:pass

代码实例:

# __desc__ = 在for循环中遍历集合的键名# 构造一个有值的集合
stars = {"陈法蓉", "陈德蓉"}for star in stars:print(star)

13.1.5 集合的元素输出顺序

Python3.6以前,字典中的键的输出顺序是无序的,在3.6以后,键的输出顺序与元素的插入顺序一致。但集合的键的输出顺序仍是无序的。

代码实例:

# __desc__ = 集合的键的输出顺序是无序的alphabet = set("abcdefg")
# alphabet的输出可能为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 从输出顺序可以看出,与元素本来的排列顺序并不一致

Python中的集合同样是基于哈希表进行实现,键的输出顺序取决于底层的数据结构。

13.1.6 知识要点

(1)Python中的集合类型是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。

(2)集合中的元素,相当于字典中的键名,元素类型必须是静态的数据类型。

(3)集合的类型名是set,可通过对象定义法和直接定义法来定义字典

(4)集合也是一种可迭代对象,可以在for循环中直接遍历出集合的键名

 

13.1.7 系统学习python

 薯条老师简介:资深技术专家,技术作家,著有《Python零基础入门指南》,《Java零基础入门指南》等技术教程。薯条老师的博客:http://www.chipscoco.com, 系统学习后端,爬虫,数据分析,机器学习、量化投资。


http://www.ppmy.cn/news/116602.html

相关文章

电脑装机必备软件清单

notepad&#xff1a;字体是Lucida grande 14字体&#xff1a;chrome谷歌输入法qq微信office2013visio2013CAJviewer百度云盘7zipkmsVLCultraISOmatlab2018idea2018&#xff0c;jdk&#xff0c;gitmysqlnavicat 转载于:https://www.cnblogs.com/igoodful/p/10922952.html

装机必备的软件

装机必备的软件 驱动人生 1&#xff1a;娱乐软件 网易云音乐 chrome 微信 QQ 百度网盘 WPS 2&#xff1a;工具软件 typoraVMWARE workstation 16 proubuntu 16.4 mirors.163.com VSCodegitpyenv&#xff08;对python版本的管理&#xff09;**sudo apt-get update 报错…

Win装机必备软件

办公软件 文本编辑器&#xff1a;notepad 窗口管理器&#xff1a;Q-Dir 文件搜索工具&#xff1a;everything 压缩工具&#xff1a;Bandzip 截图工具&#xff1a;Snipaste 下载工具&#xff1a;IDM 种子工具&#xff1a;utorrent 编程软件 Beyond compare: BCompare4…

linux装机必备软件

1. 介绍 开源精神&#xff0c;亲试无公害&#xff0c;可放心食用&#xff0c;有问题可联系作者如果对您有帮助&#xff0c;那荣幸之至 linux装机必备软件(mysql/redis/nginx/docker/...)的安装-Linux文档类资源-CSDN文库https://download.csdn.net/download/qq_52385631/8501…

Java装机必备软件下载JDKGITMavenNodeJS

前言 新机装机一站式博客&#xff0c;因为每次换机都要重新装一遍&#xff0c;到处百度很麻烦&#xff0c;索性集合在一起 JDK 下载 Oracle官网下载 安装 下载解压包后安装即可&#xff0c;注意配置环境变量 检测 IDEA IDEA下载最新版即可 Activation lanyuGIT 下载 …

Mac装机必备软件2020最全下载集合

刚买完 Macbook 的小伙伴们在被它的颜值征服的同时肯定还会很迷茫&#xff0c;因为它并不能马上为您工作&#xff0c;在完成系统的配置之后还要装上各种各样的软件才能真正发挥它的价值&#xff0c;不然就只有拿它来看看电影了。 距离Mac毒上次更新装机必备软件已经快两年过去了…

ubuntu 装机必备软件

nvidia显卡驱动、cuda安装 旧版本的cuda下载&#xff1a; CUDA Toolkit Archive | NVIDIA Developer Ubuntu 18.04.2深度学习cuda 10.2环境部署(一)_wx5c68fe3b5158e的技术博客_51CTO博客_cuda10 搜狗输入法 https://blog.csdn.net/lpCrazyBoy/article/details/80239612 虚拟…

装机必备软件之后端开发篇

工欲善其事&#xff0c;必先利其器。好的工具能够极大地提高你的工作效率&#xff0c;并且节省你宝贵的时间&#xff01;下面来一起看看有哪些好用的工具吧。 SSH工具 使用场景&#xff1a;Linux主机运维以及软件部署。 XShell 在这里推荐直接使用XShell教育版&#xff0c;…