点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享!

前言

Hi,大家好,我是可乐, 今天介绍 Python 集合的相关知识,并附上相应的案例代码,便于学习、吸收。

集合简介

集合 (Set)是 Python 中基本数据结构之一,与数学中的集合概念类似但又存在一定差异,集合中的元素唯一、且无序存储。集合使用大括号 - {}包裹,元素之间使用逗号 - 分隔,集合中的元素可以是字符串、数字、列表等其他任何不可变数据类型。集合不支持索引、嵌套,也没有切片操作,但支持更新、删除等操作,并且可进行 并集交集差集等常见的集合操作,下面我们通过案例来学习。

集合初体验

1、使用 set()方法定义一个空集合。

>>> def_set = set()>>> def_setset()# type 查看数据类型>>> type(def_set)  <class 'set'>

2、使用 {}定义一个非空集合 。

# 之前介绍过 {} 用于定义空字典# 故 {} 只可定义非空集合,即定义时初始化数据>>> def_set = {"kele", "python"}>>> def_set{"kele", "python"}# type 查看数据类型>>> type(def_set) <class 'set'>

3、集合特性之元素唯一

>>> def_set = {"kele", "python", "kele"}>>> def_set{'kele', 'python'}

4、集合特性之元素无序存储

>>> def_set = set(["1", "2", "3"])# 元素为无序存储>>> def_set{'1', '3', '2'}

5、集合特性之不可通过索引获取元素,但可通过 for 循环获取。

>>> def_set = {"kele", "python"}>>> def_set[0]# 因集合是无序的,所以不能使用索引访问Traceback (most recent call last):  File "", line 1, in TypeError: 'set' object does not support indexing# 使用 for 循环获取集合元素>>> for set_element in def_set:     print(set_element)kelepython

6、使用 innot in判断元素是否在集合中,是则返回 True, 否则返回 False

>>> def_set = ("kele", "python")>>> "kele" in def_setTrue>>> "python" not in def_setFalse

集合基础方法

集合基础方法可参照下表:

方法 说明

len(set)

计算集合元素数量

max(set)

返回集合中最大的元素

min(set)

返回集合中最小的元素

type(set)

查看数据类型

set(iterable)

将可迭代对象转换为集合

1、使用 len方法计算集合数量。

>>> def_set = {68, 8, 168}>>> len(def_set)3

2、使用 max方法,返回集合中最大的元素。

>>> def_set = {68, 8, 168}>>> max(def_set)168

3、使用 min方法,返回集合中最小的元素。

>>> def_set = {68, 8, 168}>>> min(def_set)8

4、使用 type方法查看数据类型。

>>> def_set = {"kele","python"}>>> type(def_set)<class 'set'>

5、使用 set方法将可迭代对象转换为集合。

>>> def_set = set(["kele", "python"])>>> def_set{'kele', 'python'}>>> type(set(def_set))<class 'set'>

集合内置方法

Python中的 set类提供了集合操作相关的内置方法,集合中还提供了部分操作符号与之对应,下面按照类中方法定义的顺序演示。部分集合内置函数与集合操作符对于关系可参照下表:

方法 符号 说明

difference

-

计算差集

intersection

&

计算交集

issubset

<

子集判断

symmetric_difference

^

计算对称差集

union

|

计算并集

1、使用 add方法,给集合添加元素,若元素已存在,不做任何操作。

# 使用语法:set.add(obj)# 必须给定 obj 参数>>> def_set = {"kele","python"}>>> def_set.add("kele")

# 元素已存在,不做任何操作>>> def_set{'python', 'kele'}>>> def_set.add("xuebi")>>> def_set>>> {'xuebi', 'python', 'kele'}

2、使用 clear方法清空集合。

# 使用语法:set.clear()>>> def_set = {"kele","python"}>>> def_set.clear()>>> def_setset()

3、使用 copy方法 浅拷贝复制一个新集合。

# 使用语法:set.copy()>>> def_set = {"kele","python"}>>> def_set.copy(){'kele', 'python'}

4、使用 difference方法,计算两个集合的差集,返回一个新集合,与集合运算符 -效果相同。

# 使用语法:set1.difference(set2)# 返回包含在 ste1 中,但不包含在 set2 中的元素>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}>>> def_set1.difference(def_set2){'python'}

# 使用减号运算符计算两个集合的差值>>> def_set1 - def_set2{'python'}# 也可使用集合一 减去 集合一与集合二的交集(后面会介绍)>>> def_set1 - def_set2 & def_set1{'python'}

5、使用 difference_update方法,计算两个集合的差集,并直接从 def_set1 中移除两个集合都存在的元素。

# 使用语法:set1.difference_update(set2)# 无返回值,直接从 def_set1 中移除两个集合都存在的元素>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}>>> def_set1.difference_update(def_set2)# 可以发现,已经移除了 "kele">>> def_set1{'python'}

6、使用 discard方法,删除集合中指定的元素,元素不存在也不会报错。

# 使用语法:set.discard(obj)>>> def_set = {"kele","python"}# 无返回值>>> def_set.discard("kele")>>> def_set1{'python'}# 元素不存在时不报错,不做任何操作>>> def_set.discard("xuebi")

7、使用 intersection方法,计算多个集合的交集,与集合运算符 &效果相同。

# 使用语法:set1.intersection(set2,set3,...)# 返回 set1、set2 的交集>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}>>> def_set1.intersection(def_set2){'kele'}

# 返回 set1、set2、set3 的交集>>> def_set3 = {"kele","tea"}>>> def_set1.intersection(def_set2, def_set3){'kele'}

# 也可使用交集运算符计算集合的差值>>> def_set1 & def_set2{'kele'}>>> def_set1 & def_set2 & def_set3{'kele'}

8、使用 intersection_update方法,计算多个集合的交集,并直接从 def_set1 中删除所有集合中都不重叠的元素。

# 使用语法:set1.intersection_update(set2,set3,...)# 返回 set1、set2 的交集>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}# 无返回值>>> def_set1.intersection_update(def_set2)# 已从 def_set1 中删除 "python">>> def_set1{'kele'}>>> def_set1.intersection(def_set2, def_set3){'kele'}

# 也可使用交集运算符计算集合的差值>>> def_set1 & def_set2{'kele'}>>> def_set1 & def_set2 & def_set3{'kele'}

9、使用 isdisjoint方法,判断两个集合是否不包含相同的元素,是则返回 False,否则返回 True

# 使用语法:set1.isdisjoint(set2)>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}>>> def_set1.isdisjoint(def_set2)False

>>> def_set3 = {"xuebi"}>>> def_set1.isdisjoint(def_set3)True

10、使用 issubset方法,判断 set1 是否是 set2 的子集,是则返回 True,否则返回 False

# 使用语法:set1.issubset(set2)>>> def_set1 = {"kele"}>>> def_set2 = {"kele","xuebi"}# def_set1 是 def_set2 的子集>>> def_set1.issubset(def_set2)True

# def_set3 不是 def_set2 的子集>>> def_set3 = {"xuebi"}>>> def_set1.issubset(def_set3)False

11、使用 issuperset方法,判断 set1 是否是 set2 的 超集,可理解为父集,是则返回 True,否则返回 False

# 使用语法:set1.issuperset(set2)>>> def_set1 = {"kele","xuebi"}>>> def_set2 = {"kele"}# def_set1 是 def_set2 的父集>>> def_set1.issuperset(def_set2)True

# def_set1 不是 def_set3 的父集>>> def_set3 = {"kele","python"}>>> def_set1.issuperset(def_set3)False

12、使用 pop方法,删除并返回集合中任意元素。

# 使用语法:set.pop()>>> def_set = {"kele","python"}>>> def_set.pop()'kele'>>> def_set.pop()'python'

# 空集合调用会报错>>> def_set.pop()Traceback (most recent call last):  File "", line 1, in KeyError: 'pop from an empty set'

13、使用 remove方法,删除集合中某一元素。

# 使用语法:set.remove(obj)>>> def_set = {"kele","python"}# 无返回值>>> def_set.remove("kele")>>> def_set{'python'}

# 元素不存在时会报错>>> def_set.remove("xuebi")Traceback (most recent call last):  File "", line 1, in KeyError: 'xuebi'

14、使用 symmetric_difference方法,删除两个集合中相同的元素,再取并集,即 对称差集,与集合运算符 ^效果相同。

# 使用语法:set1.symmetric_difference(set2)>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}# 先删除 kele ,再取并集>>> def_set1.symmetric_difference(def_set2){'xuebi', 'python'}

# 也可使用运算符 ^ 计算集合的对称差>>> def_set1 ^ def_set2{'xuebi', 'python'}

15、使用 symmetric_difference_update方法,取两个集合的对称差值,并在set1 中删除两个集合中相同的元素 。

# 使用语法:set1.symmetric_difference_update(set2)>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}# 无返回值>>> def_set1.symmetric_difference_update(def_set2)>>> def_set1{'python', 'xuebi'}

16、使用 union方法,取多个集合的并集,与集合运算符 |效果相同。

# 使用语法:set1.union(set2,set3,...)# 返回 set1、set2 的并集>>> def_set1 = {"kele","python"}>>> def_set2 = {"kele","xuebi"}>>> def_set1.union(def_set2){'python', 'kele', 'xuebi'}

# 返回 set1、set2、set3 的并集>>> def_set3 = {"tea","xuebi"}>>> def_set1.union(def_set2, def_set3){'kele', 'xuebi', 'python', 'tea'}

# 也可使用并集运算符计算集合的并集>>> def_set1 | def_set2{'python', 'kele', 'xuebi'}>>> def_set1 | def_set2 | def_set3{'kele', 'xuebi', 'python', 'tea'}

17、使用 update方法,添加新的元素或集合到当前集合中,重复的元素会被忽略。

# 使用语法:set1.update(set2)# 添加列表元素到当前集合中>>> def_set1 = {"kele","python"}# 无返回值>>> def_set1.update(["tea", "xuebi"])>>> def_set1{'xuebi', 'python', 'tea', 'kele'}

# 添加集合元素到当前集合中>>> def_set1 = {"kele","python"}>>> def_set2 = {"tea","xuebi"}# 无返回值>>> def_set1.update(def_set2)>>> def_set1{'xuebi', 'python', 'tea', 'kele'}

集合应用

1、使用集合对字符串进行去重。

>>> def_str = "Hikelepython">>> def_set = set(def_str)>>> def_set{'l', 'h', 't', 'p', 'o', 'H', 'n', 'e', 'i', 'k', 'y'}# 使用 join 方法连接字符串,这里暂时不考虑顺序>>> "".join(def_set)'lhtpoHneiky'

2、使用集合对列表进行去重。

>>> def_list = ["k", "e", "l", "e"]>>> def_set = set(def_list)>>> def_set{'k', 'l', 'e'}# 将集合转换成列表>>> list(def_set)['k', 'l', 'e']

3、使用集合对元组进行去重。

>>> def_tuple = ("k", "e", "l", "e")>>> def_set = set(def_tuple)>>> def_set{'k', 'l', 'e'}# 将集合转换成元组>>> tuple(def_set)('k', 'l', 'e')

总结

  1. Python 中的集合,因其元素唯一的特性,常用于数据的去重,当然,它也可用于数学集合的相关计算。

  2. 定义集合可使用  set() 方法,但不能使用 {} ,因为大括号定义的是一个空字典,集合的元素只能为不可变数据类型。

  3. 集合的内置方法中,部分有操作符与之对应,使用时可自行选择。

  4. 集合的内置方法中,有几组方法的效果需要做一下区分。

  • difference 与 difference_update,求差集

  • intersection 与 intersection_update,求交集

  • symmetric_difference 与 symmetric_difference_update,求对称差集

  • 以上几组方法的区别均在于,后者会直接操作原始集合

文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,也可分享集合相关的知识。

原创文章已全部更新至 Github:https://github.com/kelepython/kelepython

本文永久博客地址:https://kelepython.readthedocs.io/zh/latest/c01/c01_07.html

为了便于沟通交流,我已创建微信学习交流群,欢迎在后台回复 加群 加入我们。

历史文章推荐阅读一文搞定 Python 字符串操作(上)一文搞定 Python 字符串操作(下)Python 字符串,劳动节前夕加餐Python 列表操作,节后大放送Python 字典操作,母亲节加餐元组(Tuple) | 不可改变的 Python 数据类型扫码关注公众号获取更多分享

如果觉得还不错,点个"在看"鼓励一下!

python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型相关推荐

  1. set集合判断集合中是否有无元素_集合 (Set) | 一山不容二虎的 Python 数据类型

    点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享! 前言 Hi,大家好,我是可乐, 今天 ...

  2. Python灰帽子_黑客与逆向工程师的Python编程之道

    收藏自用 链接:Python灰帽子_黑客与逆向工程师的Python编程之道

  3. python 字符串交集_Python序列--集合(set)

    集合 集合用于保存不重复元素. - 集合和列表非常相似 - 不同点: 1.集合中只能存储不可变对象 2.集合中存储的对象是无序(不是按照元素的插入顺序保存) 3.集合中不能出现重复的元素 集合的所有元 ...

  4. python字符串操作_浅谈Python 字符串特有的操作方法

    来源:(微信号:python_cat)" 正如<你真的知道Python的字符串是什么吗?>所写,Python中字符串是由Uniocde编码的字符组成的不可变序列,它具备与其它序列 ...

  5. python Series 添加行_傻傻分不清系列 | Python中各种字符串处理方法

    Python易混淆知识系列:Pandas字符串方法和字符串内建函数,使用Python的一个优势就是字符串处理起来比较容易. Python的初学者在学习字符串内建函数的时候往往会很困惑:字符串的内建函数 ...

  6. python 测试字符串类型_【教程】如何用Python中的chardet去检测字符编码类型

    [背景] 之前已经使用过chardet了,也算用了不少次了. 之前也写过和chardet相关的: 但是没写教程,举例说明如何使用. 现在去举例解释解释. [python示例代码演示如何用chardet ...

  7. python 字符串 变量_检查变量是否为字符串的Python程序

    python 字符串 变量 Python | 检查变量是否为字符串 (Python | Check if a variable is a string) To check whether a defi ...

  8. python字符串 切片_用于切片字符串的Python程序

    python字符串 切片 Given a string and number of characters (N), we have to slice and print the starting N ...

  9. python字符串常量_常用的Python字符串常量

    原博文 2013-09-21 22:28 − 下面是一些常用的Python字符串常量string.digits:包含0-9的字符串string.letters:包含所有大小写字母的字符串 string ...

  10. python 面试问题_值得阅读的30个Python面试问题

    python 面试问题 Interview questions are quite tricky to predict. In most cases, even peoples with great ...

最新文章

  1. 【124】排球基本技术
  2. SQL中的关联更新和关联删除
  3. 积性函数与Dirichlet卷积 学习小记
  4. 集合-1(Collection、迭代器、Collections、泛型)
  5. 快速幂实现pow函数(从二分和二进制两种角度理解快速幂)
  6. CentOS服务器下对mysql的优化
  7. mysql optimizer组件_MySQL Optimizer
  8. Objective-C基础3:内存管理续
  9. Spring ---- ssm整合
  10. C语言图书管理系统(链表、文件功能齐全)
  11. USB转RS485/RS422接线说明
  12. 将路由器作为AP组建局域网的方法
  13. 做了一个电驴 p2p资源搜索小软件
  14. python中集合可以使用下标吗_Python之集合
  15. 使用Go语言实现单词翻译功能/simpledict 命令行词典
  16. opencv-qr码识别
  17. html+抽奖游戏,九宫格抽奖HTML+JS版
  18. 55个美丽而独特的网站页眉设计欣赏
  19. 计算机软考软件设计师2019试题,软考2019下半年软件设计师上午真题.pdf
  20. c语言程序设计作业电话簿,C语言设计简易电话簿

热门文章

  1. Elasticsearch安装之安装Java环境
  2. 用Java实现向Cassandra数据库中插入和查询数据
  3. ubuntu phpmyadmin 404 not found
  4. 域还原的三种模式,以及应用场景
  5. 通俗地告诉你:为什么Dijkstra算法是正确的?
  6. tensorflow-gpu_TensorFlow GPU单机多卡训练amp;reloadamp;predict
  7. ila数据导入matlab,MATLAB读取Xilinx ILA核保存的.ila文件中的两列数据,并输出到文件保存...
  8. ant design vue table 高度自适应_Table行内的开关组件的使用
  9. 计算机二级java应用题怎么答,2015年计算机二级考试JAVA基本操作和简单应用题
  10. 【转】MongoDB:C#应用