(13)基本对象类型--集合

1. 基本对象类型(python里面一切皆是对象)

(接前文)


1.8 集合(set)

1.8.1 集合的定义

 集合(set)是一个无序的(即没有索引)不重复(会自动去重)元素序列。

 可以使用大括号 { } 或者 set() 函数创建集合。

 集合的元素必须是不可变的,也就是说字典、列表等不能作为集合的元素,字符串、数值、元组可以。

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。建议创建集合都用set方法。

创建格式:

set_name = set(值序列) 或 set_name = {value01,value02,...},值序列可以是字符串、列表等

 示例:字符串作为元素

>>> s1 = set('good')

>>> s1

输出:{'d', 'g', 'o'}

注意:1)set创建集合时字符串中每个字符当做一个元素;2)输出的元素是无序的;3)重复的元素会剔除;

>>> s1 = {'good'}

>>> s1

输出:{'good'} #注意和set(‘good’)的区别。

 示例:列表/元组作为元素

>>> citys = set(['beijing','shanghai','guangzhou'])

>>> citys

{'shanghai', 'beijing', 'guangzhou'}

示例:字典作为元素(将字典的键作为元素)

>>> s1 = set({'zhao':18,'qian':20,'sun':17})

>>> s1

{'zhao', 'qian', 'sun'}

 示例:集合元素不能为可变数据类型

>>> s1 = set([1,2,[3,4]])  #元素为可变的列表[3,4],报错。

Traceback (most recent call last):

  File "<pyshell>", line 1, in <module>

TypeError: unhashable type: 'list'


1.8.2 集合相关方法

1.8.2.1 add方法 集合中添加一个元素

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

格式:s.add(x)。  示例:

>>> citys = set(['beijing','shanghai','guangzhou'])

>>> citys

{'shanghai', 'beijing', 'guangzhou'}

>>> citys.add('shenzheng')

>>> citys

{'shanghai', 'beijing', 'shenzheng', 'guangzhou'}


1.8.2.2 update 参数以列表,元组,字典等形式添加元素

格式:s.update( x ), x可以是字符串、列表、元组、字典等,可以有多个,用逗号分开。

若是字典,则是将字典的key作为元素添加到集合中。

示例:同时将字符串、列表、元组、字典作为参数,将里面的元素添加到s1中

>>> s1 = {'a','b','c'}

>>> s1.update('de',['f','g'],('h','i'),{'j':'Jack','k':'Kim'})

>>> s1

{'d', 'h', 'e', 'j', 'a', 'g', 'k', 'c', 'f', 'i', 'b'}  #注意是无序的


1.8.2.3 remove() 、discard( )和pop() 从集合中移除某个元素

格式:s.remove( x ),将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

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

s.pop(),  随机删除集合中的元素。先对集合进行无序排列,然后删除第一个元素并返回被删除的元素。

示例:

>>> s1 = set('abcd')

>>> s1

{'b', 'a', 'c', 'd'}

>>> s1.remove('b')

>>> s1

{'a', 'c', 'd'}

>>> s1.discard('c')

>>> s1

{'a', 'd'}

>>> s1.pop()

'd'

>>> s1.discard('d')  #不存在的元素,不会发生错误,相当于没有做移除操作。

>>> s1.remove('d') #不存在的元素,发生错误

Traceback (most recent call last):

  File "<pyshell>", line 1, in <module>

KeyError: 'd'


1.8.2.4 clear()

格式: s.clear(),清空集合 s。

示例:

>>> s1 = set('abc')

>>> s1.clear()

>>> s1


1.8.2.5 x in s 判断元素 x 是否在集合 s 中

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

示例:

>>> s1 = set('abc')

>>> 'a' in s1

True

>>> 'd' in s1

False

>>> 'a' not in s1

False

>>> 'd' not in s1

True


1.8.2.6 copy() 集合复制

>>> s1 = set('abc')

>>> s1

{'b', 'a', 'c'}

>>> s2 = s1.copy()

>>> s2

{'b', 'a', 'c'}


1.8.2.7 difference() 方法用于返回集合的差集

返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合中。返回的是集合。

示例:

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shenzheng','tianjing'}

>>> citys3 = citys1.difference(citys2)

>>> citys3 #返回新集合(set1中在set2中不存在的)

{'shanghai', 'wuhan'}

>>> citys1 #不改变原计划

{'tianjing', 'shanghai', 'beijing', 'wuhan'}


1.8.2.8 difference_update() 移除两个集合中都存在的元素(原集合剩下第二个集合中不存在的元素)

格式:set1.difference_update(set2), 移除两个集合中都存在的元素,没有返回值。

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shenzheng','tianjing'}

>>> citys1.difference_update(citys2)  #从set1中移除set2中存在的元素

>>> citys1 #改变原集合

{'shanghai', 'wuhan'}


1.8.2.9 intersection() 返回两个或更多集合中都包含的元素(不改变原集合)

格式:set1.intersection(set2, set3 ... etc)

返回两个或更多集合中都包含的元素,即交集,返回的是集合。

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shenzheng','tianjing'}

>>> citys3 = citys1.intersection(citys2,citys3)

>>> citys3 #返回新集合,set1和set2中都存在的元素

{'beijing', 'tianjing'}

>>> citys1 #不改变原集合

{'tianjing', 'shanghai', 'beijing', 'wuhan'}


1.8.2.10 intersection_update() 原集合中只保留两个或更多集合中都存在的元素(改变原集合)

格式和使用方法与intersection相同。无返回值

区别:intersection() 返回一个新的集合;

intersection_update() 在原始的集合上移除不重叠的元素,即在原集合中保留都存在的元素。

>>> citys1 = {'beijing','shanghai','tianjing','wuhan'}

>>> citys2 = {'beijing','shanghai','tianjing'}

>>> citys3 = {'beijing','tianjing'}

>>> citys1.intersection_update(citys2,citys3) #从set1中只保留set2、set3都存在的元素

>>> citys1

{'beijing', 'tianjing'}


1.8.2.11 symmetric_difference() 返回两个集合中不重复的元素集合

返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

语法:set.symmetric_difference(set)


1.8.2.12 isdisjoint() 判断两个集合是否不包含相同的元素

格式:set1.isdisjoint(set2)

判断两个集合是否不包含相同的元素,如果没有返回 True,否则返回 False。

示例:

>>> citys1 = {'beijing','shenzheng','tianjing'}

>>> citys2 = {'wuhan','shenzheng'}

>>> citys1.isdisjoint(citys2)

False


1.8.2.13 issubset() 判断集合的所有元素是否都包含在指定集合中

语法:set1.issubset(set2)

示例:

>>> s1 = {'1','2','a'}

>>> s2 = {'1','a','c','2'}

>>> s1.issubset(s2)

True


1.8.2.14 issuperset() 判断指定集合的所有元素是否都包含在原始的集合中(与issubset相反)

语法:set1.issuperset(set2)

>>> s1 = {'1','a','c','2'}

>>> s2 = {'1','2','a'}

>>> s1.issuperset(s2)

True

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容