集合属于无序可变序列,使用一对大括号"{}"作为定界符,元素之间使用逗号","分隔开,同一个集合内的每个元素都是唯一的,元素之间不允许重复。
集合中的元素只能是数字,字符串,元组等不可变类型(或者可哈希的数据),而不能包含列表、字典、集合等可变类型数据。
集合对象的创建
使用赋值符号“=”直接讲集合赋值给变量即可创建一个集合对象
>>> set1 = {1,2,3}
>>> type(set1)
<class 'set'>
使用set()类型转换函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只会保留一个;如果原序列或迭代对象中有不可哈希的值,无法转换为集合,抛出异常。
>>> set1 = set(range(1,8)) #把range对象转换为集合
>>> set1
{1, 2, 3, 4, 5, 6, 7}
>>> set1 = set([1,1,2,2,3,3,4,4,5,5]) #列表转换为集合,自动去掉重复元素
>>> set1
{1, 2, 3, 4, 5}
>>> set1 = set() #创建一个空集合必须用set()而不是{},因为{}用来创建一个空字典
>>> set1
set()
创建一个空集合必须用set()而不是使用定界符{},因为定界符{}用来创建一个空字典
集合元素的增加与删除
add()方法可以用来增加新的元素,如果该元素已经存在则忽略该操作,不会抛出异常但一次只能添加一个元素
>>> set1 = set()
>>> set1
set()
>>> set1.add (1)
>>> set1
{1}
uppdate()方法用于合并另外序列中的元素到当前集合中,并自动去除重复元素。如字符串拆分成单个字符。如果序列或迭代对象中有不可哈希的元素,无法转换为集合,抛出异常。
>>> set1
{1}
>>> set1.update ([1,2,3,4]) #更新当前列表,自动忽略重复的元素
>>> set1
{1, 2, 3, 4}
remove()方法用来删除集合中的元素,若指定元素不存在则报异常
>>> set1 = {1,2,3,4}
>>> set1.remove (5) #列表中不存在指定元素报异常
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
set1.remove (5)
KeyError: 5
>>> set1.remove (4)
>>> set1
{1, 2, 3}
discard()方法用来删除集合中的元素,若指定元素不存在则忽略该操作
>>> set1 = {1,2,3,4}
>>> set1.discard (5) #列表中不存在指定元素则忽略此次操作,不报错
>>> set1
{1, 2, 3, 4}
pop()方法用于随机删除并返回集合中的一个元素,如果集合为空则报异常
>>> set1 = {1,2,3,4}
>>> set1.pop () #随机删除并返回一个元素
1
clear()方法清空集合
>>> set1 = {1,2,3,4}
>>> set1.clear ()
>>> set1
set()
del命名来删除集合对象,不能单独删除集合中的元素
>>> set1 = {1,2,3,4}
>>> del set1
>>> set1
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
set1
NameError: name 'set1' is not defined
集合的运算
并集,交集,差集,对称差集,比较集合大小\包含关系,真子集,子集
>>> set1 = set([1,2,3,4,5])
>>> set2 = {3,4,5,6,7}
>>> set1 | set2 #并集 方法:set1|set2|...|setN
{1, 2, 3, 4, 5, 6, 7}
>>> set1.union (set2) #并集 union()方法
{1, 2, 3, 4, 5, 6, 7}
>>> set1 & set2 #交集 方法:set1 & set2 & ... & setN
{3, 4, 5}
>>> set1.intersection (set2) #交集 intersection()方法
{3, 4, 5}
>>> set1 - set2 #差集 方法:set1 - set2 - ... - setN
{1, 2}
>>> set1.difference (set2) #差集 difference()方法
{1, 2}
>>> set1 ^ set2 #对称差集,取相异部分 方法:set1 ^ set2 ^ ... ^ setN
{1, 2, 6, 7}
>>> set1.symmetric_difference (set2) #对称差集 symmetric_difference()方法
{1, 2, 6, 7}
>>> set1 = {1,2,3}
>>> set2 = {1,2,5}
>>> set3 = {1,2,3,4}
>>> set1 < set2 #比较集合大小\包含关系
False
>>> set1 < set3 #真子集
True
>>> set2 < set3 #子集
False
>>> {1,2,3} <= {1,2,3}
True