前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python基础】一文理解Python集合,17个方法全解,看完就够了

【Python基础】一文理解Python集合,17个方法全解,看完就够了

作者头像
用户7886150
修改2021-01-12 14:32:23
9940
修改2021-01-12 14:32:23
举报
文章被收录于专栏:bit哲学院

参考链接: Python中的issuperset

一、集合的定义

 01 定义与特性

 Python中的集合类似于数学中的集合概念,它是一组无序、不可重复元素序列,集合用{value1,value2}创建,某种程度上可以把集合看作是没有值的字典。字典是dict = {key:value,key2:value2,}需要key。特点:1、不同元素组成 2、无序 3、集合中的元素必须是不可变类型

 1)自动去重

 注意,集合是有不同元素组成,所以即便里面的值重复了,也会去重。

 set1 = {1, 2, 4, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 1}

print(set1) # {1, 2, 3, 4}

len(set('1232'))# 3

len('1232') # 4

 2)打印内容是无序的

 集合的元素是无序的,因此打印的时候,也是无序的

 set_0 = {"小伍哥","真","是","帅"}

print(set_0) # {'帅', '小伍哥', '是', '真'}

 3)集合中的元素必须是不可变类型

 集合类型要求元素是独一无二的,不能存在相同的元素,但是如果其中的某一个元素是可以被改变的,它一旦改变之后可能会和其他的元素相同,这样子的话集合类型就会出现错误,所以集合类型要求,该元素不能是可变数据类型

 02 集合的创建

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

 创建格式:

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

 s = {'s', 'e', 't'}

s = set(['a, b, c, d, e'])

s = set('我爱我的祖国')

s # {'国', '我', '爱', '的', '祖'}

 集合也可以用表达式(推导)的方式创建

 {x * 2 for x in 'abc'}  #{'aa', 'bb', 'cc} 

{x **2 for x in range(1,5)}   #{1, 4, 9, 16}

 创建空集合必须用set()

 set = set()  # 创建空集合必须用这种方式

dict = {}    # 使用这种方式创建的为空的字典

 ‍

 二、集合的17个方法

 #获取集合的所有方法

 print(dir(set()))

[..., 'add', 'clear', 'copy', 'difference', 'difference_update', 

'discard', 'interp', 'interp_update', 'isdisjoint', 

'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 

'symmetric_difference_update', 'union', 'update']

 01、add()

 描述:add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。注意:集合中只能包含可哈希的对象,即 list,dict 都不能嵌入到集合

 语法:set.add(elmnt)

 参数:elmnt -- 必需,要添加的元素。

 #添加不存在的元素

set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set1.add('罗玉凤')#给他加个凤姐进去

set1

{'Makiyo', 'Selina', '周扬青', '徐怀钰', '罗玉凤'}

set1.add('乔碧萝')#再给罗志祥加个乔碧萝

set1

{'Makiyo', 'Selina', '乔碧萝', '周扬青', '徐怀钰', '罗玉凤'}

#添加存在的元素

set1.add('徐怀钰')

set1

  {'Makiyo', 'Selina', '乔碧萝', '周扬青', '罗玉凤'}#我们发现,还是只有五个

 02、clear()

 描述:clear() 方法用于移除集合中的所有元素。

 语法:set.clear()

 参数:无。

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set1.clear()#一下全部清除了

set1

set()#返回一个空集合

 03、copy()

 描述:copy() 方法用于复制一个集合,会重新生成一个

 语法:set.copy()

 参数:无

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = set1.copy()#直接复制产生一个新的集合,要多少有多少

set2 

{'Makiyo', 'Selina', '周扬青', '徐怀钰'}

 04、difference()

 描述:difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。也可以用set1-set2 进行差运算,set1减去set1&set2部分

 语法:set.difference(set)

 参数:set -- 必需,用于计算差集的集合

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合

set1.difference(set2)

{'Makiyo', 'Selina'}

 05、difference_update()

 描述:difference_update()方法用于移除两个集合中都存在的元素,与difference()方法的区别在于difference() 方法返回一个移除相同元素的新集合,而difference_update()方法是直接在原来的集合中移除元素,没有返回值。

 语法:set.difference_update(set)

 参数:set -- 必需,用于计算差集的集合

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合

set1.difference_update(set2)#无返回值

print(set1)

{'Makiyo', 'Selina'}

 08、interp()

 描述:interp() 方法用于返回两个或更多集合中都包含的元素,即交集。set1&set2

 语法:set.interp(set1, set2 ... etc)

 参数:

 set1 -- 必需,要查找相同元素的集合set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 

 #两个集合取交集

set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合

set1.interp(set2)

 {'周扬青', '徐怀钰'}

#多个集合取交集

x = {"a", "b", "c"}

y = {"c", "d", "e"}

z = {"f", "g", "c"}

result = x.interp(y, z)

print(result)

{'c'}

 09、interp_update()

 描述:interp_update() 方法用于获取两个或更多集合中都重叠的元素,即计算交集。interp_update()方法不同于interp()方法,因为interp() 方法是返回一个新的集合,而 interp_update() 方法是在原始的集合上移除不重叠的元素。

 语法:set.interp_update(set1, set2 ... etc)

 参数:

 set1 -- 必需,要查找相同元素的集合set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合

set1.interp_update(set2)

print(set1)

{'周扬青', '徐怀钰'}

 10、isdisjoint()

 描述:isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回True,否则返回 False。

 语法:set.isdisjoint(set)

 参数:set -- 必需,要比较的集合

 x = {"apple", "banana", "cherry"}

y = {"google", "runoob", "facebook"}

z = x.isdisjoint(y) 

print(z)

True

 11、issubset()

 描述:issubset() 判断set1是否是set2的子集,如果是则返回 True,否则返回 False。

 语法:set.issubset(set)

 参数:set -- 必需,要比查找的集合

 示例:

 x = {"a", "b", "c"}

y = {"f", "e", "d", "c", "b", "a"}

z = x.issubset(y) 

print(z)

True

 x = {"a", "b", "c"}

y = {"f", "e", "d", "c", "b"}

z = x.issubset(y)

print(z)

False

 12、issuperset()

 描述:issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。

 语法:set.issuperset(set)

 参数:set -- 必需,要比查找的集合

 示例:

 x = {"f", "e", "d", "c", "b", "a"}

y = {"a", "b", "c"}

z = x.issuperset(y) 

print(z)

True

x = {"f", "e", "d", "c", "b"}

y = {"a", "b", "c"}

z = x.issuperset(y) 

print(z)

False

 13、pop()

 描述:pop() 方法用于随机移除一个元素。

 语法:set.pop()

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}

set1.pop()

'徐怀钰'

set1

 {'Makiyo', 'Selina', '周扬青'}

 14、remove()

 描述:remove() 方法用于移除集合中的指定元素。该方法不同于discard()方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

 语法:set.remove(item)

 参数:item -- 要移除的元素

 #构建一个罗志祥历任女友的集合

set1 = {'周扬青','徐怀钰','Makiyo','Selina'}

#现在我们拿走一个看看

set1.remove('徐怀钰')

set1

{'Makiyo', 'Selina', '周扬青'}#人家还剩3个,真是

#再拿走一个集合里面没有的,发现并没有报错

set1.discard('女助理')

set1

{'Makiyo', 'Selina', '周扬青'}

#用remove方法试试,发现就报错了

set1.remove('女助理')

KeyError: '女助理'

 15、discard()

 描述:discard() 方法用于移除指定的集合元素。该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

 语法:set.discard(value)

 参数:value -- 必需,要移除的元素

 #构建一个罗志祥历任女友的集合

set1 = {'周扬青','徐怀钰','Makiyo','Selina'}

#现在我们拿走一个看看

set1.discard('徐怀钰')

set1

{'Makiyo', 'Selina', '周扬青'}#人家还剩3个,真是

#再拿走一个集合里面没有的,发现并没有报错

set1.discard('女助理')

set1

{'Makiyo', 'Selina', '周扬青'}

#用remove方法试试,发现就报错了

set1.remove('女助理')

KeyError: '女助理'

 16、symmetric_difference()

 描述:symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

 语法:set.symmetric_difference(set)

 参数:set -- 集合

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合

set1.symmetric_difference(set2)

 {'Makiyo', 'Selina', '乔碧萝', '徐怀钰', '罗玉凤'}

 17、symmetric_difference_update()

 描述:symmetric_difference_update() 方法移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

 语法:set.symmetric_difference_update(set)

 参数:set -- 要检测的集合

 set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合

set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合

set1.symmetric_difference_update(set2) 

print(set1)

{'Selina', '罗玉凤', '乔碧萝', 'Makiyo'}

 16、union()

 描述:union() 取并集,效果等同于 | ,重复元素只会出现一次,但是括号里可以是 list,tuple,其他 , 甚至是 dict

 语法:set.union(set1, set2...)

 参数:

 set1 -- 必需,合并的目标集合set2 -- 可选,其他要合并的集合,可以多个,多个使用逗号 , 隔开。

 #两个集合的并集

set1 = {'小苹果','大桃子','长香蕉'}

set2 = {'小李子','大萝卜','长香蕉'}

set1.union(set2)

{'大桃子', '大萝卜', '小李子', '小苹果', '长香蕉'}#长香蕉只出现一次

#三个集合并集

set3 = {'烂柿子','罗志祥'}

set1.union(set2,set3)

{'大桃子', '大萝卜', '小李子', '小苹果', '烂柿子', '罗志祥', '长香蕉'}

#集合和列表也可以

set4=['小可爱','西红柿']

set1.union(set4)

 {'大桃子', '小可爱', '小苹果', '西红柿', '长香蕉'}

#利用交集并集来写一个字符串相似的小方法

def jaccard_sim(arg0,arg1):

    set1 = set(arg0)

    set2 = set(arg1)

    sim = len(set1.interp(set2))/len(set1.union(set2))

    return(sim)#interp 求集合的交集

arg0 = '(质量问题)标识标签不合格'

arg1 = '(质量问题)涉嫌质量不合格'     

jaccard_sim(arg0,arg1)

0.6428571428571429

 检测下两个标题的相似性

 arg0 = '罗志祥道歉人设崩塌:多个品牌商中枪 代言微博遭删除'

arg1 = '凌晨五点的罗志祥:你知不知道为了出轨,我有多努力'     

jaccard_sim(arg0,arg1)

0.1428571428571

 17、update()

  描述:update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

 语法:set.update(set)

 参数:set -- 必需,可以是元素或集合

 x = {"apple", "banana", "cherry"}

y = {"google", "runoob", "apple"}

x.update(y) 

print(x)

{'banana', 'apple', 'google', 'runoob', 'cherry'}

往期精彩回顾

适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑

AI基础下载机器学习的数学基础专辑

获取本站知识星球优惠券,复制链接直接打开:

https://t.zsxq.com/qFiUFMV

本站qq群704220115。

加入微信群请扫码:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档