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 self,cls,decorator的理解
Jul 13 Python
构建Python包的五个简单准则简介
Jun 15 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python针对excel的操作技巧
Mar 13 Python
使用python存储网页上的图片实例
May 22 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
Python中类的创建和实例化操作示例
Feb 27 Python
Python发展简史 Python来历
May 14 Python
如何使用python操作vmware
Jul 27 Python
python 遍历pd.Series的index和value
Nov 26 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Python pip配置国内源的方法
Feb 14 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
html超链接打开窗口大小的方法
2013/03/05 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
javascript读写json示例
2014/04/11 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
js获取ip和地区
2017/03/10 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
puppeteer库入门初探
2019/01/09 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
python实现解数独程序代码
2017/04/12 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
python如何进行矩阵运算
2020/06/05 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
历史系毕业生自荐信
2013/10/28 职场文书
工作表扬信的范文
2014/01/10 职场文书
个人党性分析材料
2014/12/19 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
create-react-app开发常用配置教程
2022/06/25 Javascript
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技