社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

一文掌握Python集合的语法与应用

Python小屋 • 6 年前 • 424 次点击  
董付国老师面向计算机相关专业的教材《Python程序设计(第2版)》和面向非计算机专业的教材《Python程序设计基础(第2版)》同时被评为清华大学出版社2019年度畅销图书
=================
封面图片:《Python程序设计基础(第2版)》,ISBN:9787302490562,董付国,清华大学出版社
图书详情:
配套资源:用书教师可以免费获取教学大纲、教案、课件、源码、习题答案、课堂管理与考试系统,中国大学MOOC、智慧树网慕课。
===============
Python相关课程教材选用参考与建议
===============

6.1  基本概念

Python语言中的集合是无序的、可变的容器类对象,所有元素放在一对大括号中,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,不允许重复。
集合中只能包含数字、字符串、元组等不可变类型或可哈希的数据,不能包含列表、字典、集合等可变类型或不可哈希的数据,包含列表等可变类型数据的元组也不能作为集合的元素。
集合中的元素是无序的,元素存储顺序和添加顺序并不一致,先放入集合的元素不一定存储在前面。集合中的元素不存在“位置”或“索引”的概念,不支持使用下标直接访问指定位置上的元素,不支持使用切片访问其中的元素,也不支持使用random中的choice()函数从集合中随机选取元素,但支持使用random模块中的sample()函数随机选取部分元素。

6.2  集合创建与删除

除了把若干可哈希对象放在一对大括号内创建集合,也可以使用set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,在转换为集合的时候只保留一个,自动去除重复元素。如果原序列或可迭代对象中有可变类型的数据,无法转换成为集合,抛出TypeError异常并提示对象不可哈希。当不再使用某个集合时,可以使用del语句删除整个集合。下面的代码演示了创建集合的不同形式和方法。
6.3  集合常用方法
Python内置集合类set支持内置函数len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()、all()、any()等内置函数和并集运算符“|”、交集运算符“&”、差集运算符“-”、对称差集运算符“^”、成员测试运算符“in”、同一性测试运算符“is”,不支持内置函数reversed(),相关内置函数的介绍详见本书第2章。另外,set类自身还提供了大量方法,如表6-1所示。
表6-1  Python内置集合类提供的方法

方法

功能简介

add(...)

往当前集合中增加一个可哈希元素,如果集合中已经存在该元素,直接忽略该操作,如果参数不可哈希,抛出TypeError异常并提示参数不可哈希。该方法没有返回值

clear()

删除当前集合对象中所有元素,没有返回值

copy()

返回当前集合对象的浅复制

difference(...)

接收一个或多个集合(或其他可迭代对象),返回当前集合对象与所有参数对象的差集,功能类似于差集运算符-

difference_update(...)

接收一个或多个集合(或其他可迭代对象),从当前集合中删除所有参数对象中的元素,对当前集合进行更新,该方法没有返回值,功能类似于运算符-=

discard(...)

接收一个可哈希对象作为参数,从当前集合中删除该元素,如果参数元素不在当前集合中则直接忽略该操作。该方法没有返回值

intersection(...)

接收一个或多个集合对象(或其他可迭代对象),返回当前集合与所有参数对象的交集,功能类似于交集运算符&

intersection_update(...)

接收一个或多个集合(或其他可迭代对象),使用当前集合与所有参数对象的交集更新当前集合对象,功能类似于运算符&=

isdisjoint(...)

接收一个集合(或其他可迭代对象),如果当前集合与参数对象的交集为空则返回True

issubset(...)

接收一个集合(或其他可迭代对象),测试当前集合是否为参数对象的子集,是则返回True,否则返回False,等价于关系运算符<=

issuperset(...)

接收一个集合(或其他可迭代对象),测试当前集合是否为参数对象的超集,是则返回True,否则返回False,等价于关系运算符>=

pop()

不接收参数,删除并返回当前集合中的任意一个元素,如果当前集合为空则抛出KeyError异常

remove(...)

从当前集合中删除一个元素,如果参数指定的元素不在集合中,抛出KeyError异常

symmetric_difference(...)

接收一个集合(或其他可迭代对象),返回当前集合与参数对象的对称差集,等价于对称差集运算符^

symmetric_difference_update(...)

接收一个集合(或其他可迭代对象),使用当前集合与参数对象的对称差集更新当前集合,等价于运算符^=

union(...)

接收一个或多个集合(或其他可迭代对象),返回当前集合与所有参数对象的并集,功能类似于并集运算符|

update(...)

接收一个或多个集合(或其他可迭代对象),把参数对象中所有元素添加到当前集合对象中,没有返回值

6.3.1  原地增加/删除集合元素

集合方法add()、update()可以用于向集合中添加新元素,difference_update()、intersection_update()、pop()、remove()、symmetric_difference_update()、clear()可以用于删除集合中的元素,这些方法都是对集合对象原地进行修改。下面的代码演示了部分方法的用法。

6.3.2  计算交集/并集/差集/对称差集返回新集合

集合方法difference()、intersection()、union()分别用来返回当前集合与另外一个或多个集合(或其他可迭代对象)的差集、交集、并集,方法symmetric_difference()用来返回当前集合与另外一个集合(或其他可迭代对象)的对称差集。下面的代码演示了这几个方法的用法。

6.3.3  集合测试

集合方法issubset()、issuperset()、isdisjoint()分别用来测试当前集合是否为另一个集合的子集、是否为另一个集合的超集、是否与另一个集合不相邻(或交集是否为空)。下面的代码演示了这几个方法的用法。

6.4  综合例题解析

例6-1  编写程序,求解买啤酒问题。一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升、32升、36升、40升和62升,并且只卖整桶酒,不零卖。第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的2倍。计算有多少升啤酒。
解析:逐个遍历每一桶并假设是啤酒,从剩余几桶中任选两桶并假设是第一位顾客购买的葡萄酒的数量,如果这两桶啤酒恰好是剩余几桶总容量的三分之一,说明本次假设的啤酒是正确的。
例6-2  编写程序,输入包含任意数据的列表,检查列表中数据的重复情况。如果列表内所有元素都是一样的,输出“完全重复”;如果列表内所有元素都互相不一样,输出“完全不重复”;否则输出“部分重复”。
解析:利用集合能够自动去除重复的特点,把列表转换为集合,然后比较列表和集合的长度。如果二者相等,表示原列表中的数据无重复;如果转换为集合后只有一个元素,表示原列表中的数据是完全重复的;如果转换为集合后数据数量减少但没有减少为1,说明原列表中的数据有一部分是重复的。




温馨提示
关注本公众号“Python小屋”,通过菜单“最新资源”==>“历史文章”可以快速查看分专题的930篇技术文章列表(可根据关键字在页面上搜索感兴趣的文章),通过“最新资源”==>“微课专区”可以 免费观看450节Python微课,通过“最新资源”==>“培训动态”可以查看近期Python培训安排,通过“最新资源”==>“教学资源”可以查看Python教学资源。

---董付国老师Python系列图书---

友情提示:不建议购买太多,最好先通过京东、当当、天猫查阅图书了解目录和侧重点,然后再选择购买适合自己的书。

(1)《Python程序设计(第2版)》(ISBN:978-7-302-43651-5),清华大学出版社,2016年8月出版,2019年度清华大学出版社畅销图书

(2)《Python可以这样学》(ISBN:978-7-302-45646-9),清华大学出版社,2017年2月

(3)《Python程序设计基础(第2版)》(ISBN:978-7-302-49056-2)清华大学出版社,2018年1月出版2019年度清华大学出版社畅销图书

(4)《中学生可以这样学Python》(ISBN:978-7-302-48039-6)清华大学出版社,配套微课:《中学生可以这样学Python》84节微课免费观看地址

(5)《Python程序设计开发宝典》(ISBN:978-7-302-47210-0)清华大学出版社,2018年10月

(6)《玩转Python轻松过二级》(ISBN:978-7-302-49916-9)清华大学出版社,2018年5月
(7)《Python程序设计基础与应用(ISBN:978-7-111-60617-8),机械工业出版社,2018年9月
(8)Python程序设计实验指导书》(ISBN:9787302525790),清华大学出版社,2019年4月
(9)《Python编程基础与案例集锦(中学版)(ISBN:978-7-121-35539-4),电子工业出版社,2019年4月
(10)大数据的Python基础》(ISBN:978-7-111-62455-4),机械工业出版社,预计2019年5月出版
(11)译作《Python程序设计》,机械工业出版社(华章),2018年11月出版
(12)繁体版《Python也可以这样学》,台湾博硕文化股份有限公司,2017年10月出版,本书为《Python可以这样学》在台湾发行的繁体版,两本书内容一样,不建议重复购买
(13)《Python程序设计实例教程》(ISBN:978-7-111-63198-9),机械工业出版社
(14)《Python数据分析、挖掘与可视化》(ISBN:978-7-115-52361-7),人民邮电出版社,2019年12月



《中学生可以这样学Python》84节微课免费观看地址
Python课程期末考试编程题自动批卷原理与实现模板
“Python小屋”免费资源汇总(截至2018年11月28日)
Python课堂上我与学生斗智斗勇已8个学期
技术要点|Python监控学生端电脑屏幕自动识别学习状态


课后习题答案
《Python程序设计基础(第2版)》习题答案
《Python程序设计基础与应用》课后习题答案


实验指导书
《Python程序设计》实验指导书(30个实验)
Python实验项目1例:使用进程池统计指定范围内素数的个数


教学大纲
非计算机专业《Python程序设计基础》教学参考大纲
计算机相关专业“Python程序设计”教学大纲(参考)


课件
1900页Python系列PPT分享一:基础知识(106页)
1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)
1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)
1900页Python系列PPT分享四:字符串与正则表达式(109页)
1900页Python系列PPT分享五:函数设计与应用(134页)
1900页Python系列PPT分享六:面向对象程序设计(86页)
1900页Python系列PPT分享七:文件操作(132页)
1900页Python系列PPT分享八:异常处理结构与程序调试、测试(70页)
2000页Python系列PPT分享九:(GUI编程)(122页)


报告PPT
报告PPT(163页):基于Python语言的课程群建设探讨与实践
报告PPT(123页):Python编程基础精要
(PPT)Python程序设计课程教学内容组织与教学方法实践
报告PPT|Python编程之美(45页)

PPT|Python程序设计基础教学要点、常见错误与案例分享(55页,配音频)


直播、回放


免费直播课|Python程序设计教学要点与教学方法

免费直播课|使用Python操作Word、Excel、PowerPoint文件


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53925