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 相关文章推荐
在Python中调用ggplot的三种方法
Apr 08 Python
Python与shell的3种交互方式介绍
Apr 11 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
python学生信息管理系统(完整版)
Apr 05 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
python 如何将office文件转换为PDF
Sep 22 Python
python 实现学生信息管理系统的示例
Nov 28 Python
Pytest中skip和skipif的具体使用方法
Jun 30 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
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
Javascript 事件流和事件绑定
2009/07/16 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python ChainMap的使用和说明详解
2019/06/11 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
python面试题之列表声明实例分析
2019/07/08 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
连带责任保证书
2014/04/29 职场文书
外出学习心得体会范文
2016/01/18 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python