python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素。 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。
sets 支持 x in set的bool运算判别x是否在集合内, len(set)集合的长度,和 for x in set对集合内数据的操作。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets**不支持 indexing, slicing**, 或其它类序列(sequence-like)的操作。
集合用于包含一组无序的对象。要创建集合,可使用set()函数并像下面这样提供一系列的项:
In []: s = set([,,,]) #创建一个数值集合
In []: t = set("Hello") #创建一个唯一字符的集合
与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。例如,如果检查前面代码中t集合的值,结果会是:
In []: t
Out[]: {'H', 'e', 'l', 'o'}
集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:
- a = t | s # t 和 s的并集
- b = t & s # t 和 s的交集
- c = t – s # 求差集(项在t中,但不在s中)
- d = t ^ s #对称差集(项在t或s中,但不会同时出现在二者中)
基本操作:
1、添加新的元素,.add()用于添加单个元素、.update()用于批量添加元素,如果喂给add的是‘avda’这种多字符串可以成为一个元素,但是喂给update会对字符串去重操作
In []: t.add('x')
In []: t
Out[]: {'H', 'e', 'l', 'o', 'x'}
In []: t.update('aa','bbb')
In []: t
Out[]: {'H', 'a', 'b', 'e', 'l', 'o', 'x'}
In []: t.add('ccc')
In []: t
Out[]: {'H', 'a', 'b', 'ccc', 'e', 'l', 'o', 'x'}
2、使用remove()可以删除一项,只能一个一个删掉
In [12]: t.remove('H')
In []: t
Out[]: {'a', 'b', 'ccc', 'e', 'l', 'o', 'x'}
3、集合长度
In [15]: len(t)
Out[15]: 7
4、bool判断
#x in s 测试 x 是否是 s 的成员
In []: 'a' in t
Out[]: True
#x not in s 测试 x 是否不是 s 的成员
In []: 'k' not in t
Out[]: True
#s.issubset(t),s <= t 测试是否s中的每一个元素都在t中
In []: s.issubset(t)
Out[]: False
#s.issuperset(t),s >= t测试是否t中的每一个元素都在s中
In []: s.issuperset(t)
Out[]: False
5、交集(&)、(intersection)项同时在t与s中
In []: s&t
Out[]: set()
In []: s.intersection(t)
Out[]: set()
6、并集(|)、(union),项在t中或者在s中
In []: s|t
Out[]: {'a', , , 'ccc', 'e', , , 'l', 'o', 'x', 'b'}
In []: s.union(t)
Out[]: {'a', , , 'ccc', 'e', , , 'l', 'o', 'x', 'b'}
7、差集(-)、(difference),项在s中,但不在t中
In [24]: s-t
Out[24]: {3, 5, 9, 10}
In [25]: s.difference(t)
Out[25]: {3, 5, 9, 10}
8、对称差集(^)、(sysmmetric_difference),项在t或s中,但不会同时出现在二者中
In []: s^t
Out[]: {'a', , , , , 'o', 'x', 'ccc', 'e', 'l', 'b'}
In []: s.symmetric_difference(t)
Out[]: {'a', , , , , 'o', 'x', 'ccc', 'e', 'l', 'b'}
请注意:union(), intersection(), difference() 和 symmetric_difference() 的非运算符(non-operator,就是形如 s.union()这样的)版本将会接受任何 iterable 作为参数。相反,它们的运算符版本(operator based counterparts)要求参数必须是 sets,如果都是set会报错。
In [29]: set('abc') & 'cbs'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input--caf> in <module>()
----> set('abc') & 'cbs'
TypeError: unsupported operand type(s) for &: 'set' and 'str'
#如果是非运算符,则可以;
In []: set('abc').intersection('cbs')
Out[]: {'b', 'c'}