Python3 集合set入门基础


Posted in Python onFebruary 10, 2020

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合、是字典的表亲
{}并不是字典的特权

集合的特点:

1 具有唯一性
2 不支持索引
3 与字典相同,也是无序的

创建格式:

parame = {value01,value02,...}
或者
set(value)

创建方法

num1 = {1,2,3,4}
num2 = set(['q','w','e','r'])

print(num1,num2)

num3 = [1,2,3,4,2,4,2,1]
temp = num3.copy()
temp = set(temp)
print(temp)

实例

>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)           # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket         # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False
 
>>> # 下面展示两个集合间的运算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                 
{'a', 'r', 'b', 'c', 'd'}
>>> a - b               # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b               # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b               # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b               # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

类似列表推导式,同样集合支持集合推导式(Set comprehension):

>>>a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

集合的基本操作

1、添加元素

语法格式如下:

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

>>>thisset = set(("Baidu", "3water", "Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{'Facebook', 'Taobao', 'Baidu', '3water'}

输出的内容都是随机的没有排序

还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:

s.update( x )

x 可以有多个,用逗号分开。

>>>thisset = set(("Baidu", "Jb51", "Taobao"))
>>> thisset.update({1,3})
>>> print(thisset)
{1, 3, 'Baidu', 'Taobao', 'Jb51'}
>>> thisset.update([1,4],[5,6]) 
>>> print(thisset)
{1, 3, 4, 5, 6, 'Baidu', 'Taobao', 'Jb51'}
>>>

2、移除元素

语法格式如下:

s.remove( x )

将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

实例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Baidu', 'Jb51'}
>>> thisset.remove("Facebook")  # 不存在会发生错误
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
KeyError: 'Facebook'
>>>

此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:

s.discard( x )

实例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))
>>> thisset.discard("Facebook") # 不存在不会发生错误
>>> print(thisset)
{'Taobao', 'Baidu', 'Jb51'}

我们也可以设置随机删除集合中的一个元素,语法格式如下:

s.pop()

脚本模式实例(Python 3.0+)

thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))
x = thisset.pop()
 
print(x)

输出结果:

$ python3 test.py

Jb51

多次执行测试结果都不一样。

set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。

3、计算集合元素个数

语法格式如下:

len(s)

计算集合 s 元素个数。

实例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))
>>> len(thisset)
3

4、清空集合

语法格式如下:

s.clear()

清空集合 s。

实例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()

5、判断元素是否在集合中存在

语法格式如下:

x in s

判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

实例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))
>>> "Jb51" in thisset
True
>>> "Facebook" in thisset
False
>>>

集合内置方法完整列表

方法 描述
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop() 随机移除元素
remove() 移除指定元素
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集
update() 给集合添加元素

下面继续为大家补充一些实例

s.update( "字符串" ) 与 s.update( {"字符串"} ) 含义不同:

s.update( {"字符串"} ) 将字符串添加到集合中,有重复的会忽略。
s.update( "字符串" ) 将字符串拆分单个字符后,然后再一个个添加到集合中,有重复的会忽略。

>>> thisset = set(("Baidu", "Jb51", "Taobao"))
>>> print(thisset)
{'Baidu', 'Jb51', 'Taobao'}
>>> thisset.update({"Facebook"})
>>> print(thisset) 
{'Baidu', 'Jb51', 'Taobao', 'Facebook'}
>>> thisset.update("Yahoo")
>>> print(thisset)
{'h', 'o', 'Facebook', 'Baidu', 'Y', 'Jb51', 'Taobao', 'a'}
>>>

set() 中参数注意事项

1.创建一个含有一个元素的集合

>>> my_set = set(('apple',))
>>> my_set
{'apple'}

2.创建一个含有多个元素的集合

>>> my_set = set(('apple','pear','banana'))
>>> my_set
{'apple', 'banana', 'pear'}

3.如无必要,不要写成如下形式

>>> my_set = set('apple')
>>> my_set
{'l', 'e', 'p', 'a'}
>>> my_set1 = set(('apple'))
>>> my_set1
{'l', 'e', 'p', 'a'}

集合用 set.pop() 方法删除元素的不一样的感想如下:

1、对于 python 中列表 list、tuple 类型中的元素,转换集合是,会去掉重复的元素如下:

>>> list = [1,1,2,3,4,5,3,1,4,6,5]
>>> set(list)
{1, 2, 3, 4, 5, 6}
>>> tuple = (2,3,5,6,3,5,2,5)
>>> set(tuple)
{2, 3, 5, 6}

2、集合对 list 和 tuple 具有排序(升序),举例如下:

>>> set([9,4,5,2,6,7,1,8])
{1, 2, 4, 5, 6, 7, 8, 9}
>>> set([9,4,5,2,6,7,1,8])
{1, 2, 4, 5, 6, 7, 8, 9}

3、集合的 set.pop() 的不同认为

有人认为 set.pop() 是随机删除集合中的一个元素、我在这里说句非也!对于是字典和字符转换的集合是随机删除元素的。当集合是由列表和元组组成时、set.pop() 是从左边删除元素的如下:

列表实例:

set1 = set([9,4,5,2,6,7,1,8])
print(set1)
print(set1.pop())
print(set1)

输出结果:

{1, 2, 4, 5, 6, 7, 8, 9}
1
{2, 4, 5, 6, 7, 8, 9}

元组实例:

set1 = set((6,3,1,7,2,9,8,0))
print(set1)
print(set1.pop())
print(set1)

输出结果:

{0, 1, 2, 3, 6, 7, 8, 9}
0
{1, 2, 3, 6, 7, 8, 9}

>>> thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))
>>> y=set({'python'})
>>> print(y.union(thisset))
{'python', 'Taobao', 'Baidu', 'Facebook', 'Jb51'}

输出结果:

{'python', 'Baidu', 'Taobao', 'Facebook', 'Jb51'}

y 的集合里此时只含有一个元素 'python',而如果不加花括号时,y 的集合里含有'p','y','t','h','o','n'五个元素。

>>> thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))
>>> y=set('python')
>>> print(y.union(thisset))
{'p', 'o', 'y', 'Taobao', 'h', 'Baidu', 'Facebook', 'Jb51', 'n', 't'}

也可以使用括号:

thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))
y=set(('python','love'))
print(y.union(thisset))

输出结果:

{'Facebook', 'Jb51', 'Taobao', 'python', 'love', 'Baidu'}

但是当 y 的集合里只有一个字符串时,结果与不加花括号一样。

列表的 sort 方法可以实现就地排序(无需创建新对象,字符串按首字母进行排序):

a=[1, 51, 31, -3, 10]
a.sort()
print(a)

s=['a','ab','3e','z']
s.sort()
print(s)

输出:

[-3, 1, 10, 31, 51]
['3e', 'a', 'ab', 'z']

按集合中的字符长度进行排序:

a=[1, 51, 31, -3, 10]
a.sort()
print(a)

b=['a','ab','3ae','zaaa','1']
b.sort()
print(b)

c=['a','ab','3ae','zaaa','1']
c.sort(key=len)
print(c)

输出:

[-3, 1, 10, 31, 51]
['1', '3ae', 'a', 'ab', 'zaaa']
['a', '1', 'ab', '3ae', 'zaaa']

下面是其他网友的补充图文

集合也也也也是python内置的一种数据结构,它是一个无序且元素不重复的序列。这里有两个关键词一个是无序,这一点和字典是一样的,另一个关键词是元素不重复,这一点和字典的key(键)是一样的。这么看来集合和字典还真像,事实上他们长的也很像:

Python3 集合set入门基础

集合和字典一样也是用{}包起来的,那么问题来了,如果只写一个{}那它是集合还是字典呢?

Python3 集合set入门基础

{}里没有元素创建的是字典,那么问题又来了,空集合又该怎么创建呢?我们可以使用set()函数创建。既然集合已经创建出来了,接着就看看集合的一些用法吧。

1.往集合里增加元素:

Python3 集合set入门基础

集合的add函数可以往集合里添加一个元素,update可以更新一个或多个元素,其参数可以是列表、集合等等。

2.删除集合里的元素。

Python3 集合set入门基础

要删除集合中的元素方法还挺多的啊,不过那个pop函数是认真的吗?随机移除元素也太随意了吧...

由于集合是无序的,所以没办法用下标来获取集合的元素,也没办法像字典一样通过key来获取值。这就尴尬了。看来集合就像貔貅一样只能存数据不能取数据。

3.集合的运算

Python3 集合set入门基础

交集和并集很好理解,差集是个相对的概念,集合1相对集合2差集和集合2相对集合1的差集是不一样的,需要特别注意。所以对称差集可以理解为非交集元素组成的那部分。

4.集合的包含关系

Python3 集合set入门基础

集合的几种关系:相交/不相交 ,包含/不包含(相对而言)。isdisjoint函数是判断不相交的,不相交才返回True。

Python 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
简单上手Python中装饰器的使用
Jul 12 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
教你用Python创建微信聊天机器人
Mar 31 Python
python实现将汉字保存成文本的方法
Nov 16 Python
Python生成rsa密钥对操作示例
Apr 26 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
python库matplotlib绘制坐标图
Oct 18 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
Python求解排列中的逆序数个数实例
May 03 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
Django的CVB实例详解
Feb 10 #Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 #Python
Django关于admin的使用技巧和知识点
Feb 10 #Python
Python实现括号匹配方法详解
Feb 10 #Python
Python re正则表达式元字符分组()用法分享
Feb 10 #Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 #Python
Python获取、格式化当前时间日期的方法
Feb 10 #Python
You might like
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
十个Python程序员易犯的错误
2015/12/15 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
我就是这样学习Python中的列表
2019/06/02 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
深入理解Python 多线程
2020/06/16 Python
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
廉政教育心得体会
2014/01/01 职场文书
大学生毕业鉴定
2014/01/31 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
Python实现科学占卜 让视频自动打码
2022/04/09 Python