集合
Python 还包含了一个数据类型 —— set (集合)。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。集合用大括号表示。
集合的创建
1.set() 函数可以用来创建集合
x = set('spam')
y = set(['h','a','m'])
x, y#用逗号隔开的变量属于元组
##(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))
s1=set([1,2,3,4])
s1
#{1, 2, 3, 4}
s3=set({'a':2,'b':3,'c':4})
s3
#{'c', 'a', 'b'}
set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。
2.大括号也可以创建集合
想要创建空集合,你必须使用 set() 而不是 {}。后者用于创建空字典,我们在后面介绍的一种数据结构。
集合的操作
集合添加
集合的添加有两种方式,分别是add和update。但是它们在添加元素时是由区别的:
- add()方法
把要传入的元素作为一个整体添加到集合中,如:
s=set('one')
s
#{'e', 'o', 'n'}
s.add('two')
s
#{'e', 'two', 'o', 'n'}
- update()方法
是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的字符。可以一次添加多个值,如:
s=set('one')
s
{'e', 'o', 'n'}
s.update('two')
s
{'e', 'n', 't', 'w', 'o'}
集合删除
集合的删除操作使用的方法跟列表是一样的,使用的也是remove方法。如:
- setVar.remove(element)
setVar :为一个set类型的变量
element :表示要查找并删除的元素
函数作用:
在集合setVar中查找element元素,如果存在则删除;如果没找到,则报错。
s=set('one')
s
{'e', 'o', 'n'}
s.remove('e')
s
{'n', 'o'}
- setVar.discard(element)
setVar :为一个set类型的变量
element :表示要查找并删除的元素
函数作用:
在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做
sList
set([1, 2, 3, 4, 5])
sList.discard(1)
sList
set([2, 3, 4, 5])
- s.pop()
s:为set类型的变量
函数作用:
删除并返回set类型的s中的一个不确定的元素,如果为空引发KeyError错误。
sList
set([2, 3, 4, 5])
sList.pop()
2
- s.clear()
s:set类型的变量
函数作用:
清空s集合中的所有元素
List
set([3, 4, 5])
sList.clear()
sList
set([])
集合的遍历
集合的遍历跟序列的遍历方法完全一样。
s=set('one')
s
{'e', 'o', 'n'}
for i in s:
print(i)
e
o
n
另外一种遍历(变量idex表示集合中元素i的索引。)
s=set('one')
s
{'e', 'o', 'n'}
for idex,i in enumerate(s):
print (idex,i)
0 e
1 o
2 n
集合函数的补充
函数 说明
len(s) set 的长度
x in s 测试 x 是否是 s 的成员
x not in s 测试 x 是否不是 s 的成员
s.issubset(t) 测试是否 s 中的每一个元素都在 t 中
s.issuperset(t) 测试是否 t 中的每一个元素都在 s 中
s.union(t) 返回一个新的 set 包含 s 和 t 中的每一个元素
s.intersection(t) 返回一个新的 set 包含 s 和 t 中的公共元素
s.difference(t) 返回一个新的 set 包含 s 中有但是 t 中没有的元素
s.symmetric_difference(t) 返回一个新的 set 包含 s 和 t 中不重复的元素
s.copy() 返回 set “s”的一个浅复制