本文简单介绍了Python语言里set类型自带的方法,set类型表示元素和集合的从属关系(membership),和列表等序列相比,最大的特点是无序。可以跟数学里的集合概念完全对应起来。 概念 数学里的集合概念,在Python语言里对应的是set类型。与list,tuple不同的地方是,set更加强调的是一种"从属关系"(membership),跟顺序无关,所以有重复的元素会先排除。 >>> set([1, 1, 1, 1, 2, 3]) set([1, 2, 3]) #重复元素被排除 >>> set([3, 2, 1]) set([1, 2, 3]) #无序的集合 >>> set类型的创建 花括号用来创建set类型的变量,这与字典很类似,只是缺少了value,后面会逐渐发现,set类型和字典的key有一些类似之处,比如:无序、不可重复、必须是hashable的,所以用花括号表示,是理所当然的。 set类型还有一种标准的表示法是 set([…]) ,例如 >>> {'a','b'} set(['a', 'b']) >>> set添加元素 set类型有内置函数add用来给set添加元素 >>> A = {'a','b'} >>> A.add('c') >>> A set(['a', 'c', 'b']) >>> set更新元素 set类型有四个内置update函数用来给set添加元素,对应于Python 的集合运算中的4种运算 并集更新 与add类似,只是添加的不是单个元素,而且另一个集合,这和字典的update函数功能非常相似。最后的结果是两个集合的并集 >>> A = {'a','b'} >>> A.update({'c', 'd'}) #iterable的参数都可以传递 >>> A set(['a', 'c', 'b', 'd']) >>> 另一种写法是:|= >>> A = {'a','b'} >>> A |= {'c', 'd'} >>> A set(['a', 'c', 'b', 'd']) >>> 交集更新 内置函数intersection_update返回的结果是两个集合的交集 >>> A = {'a','b'} >>> A.intersection_update({'b', 'd'}) #iterable的参数都可以传递 >>> A set(['b']) >>> 另一种写法是 &= >>> A = {'a','b'} >>> A &= {'b', 'd'} >>> A set(['b']) >>> 差集更新 内置函数difference_update返回的结果是两个集合的差集 >>> A = {'a','b'} >>> A.difference_update({'b', 'd'}) #iterable的参数都可以传递 >>> A set(['a']) >>> 另一种写法是 -= >>> A = {'a','b'} >>> A -= {'b', 'd'} >>> A set(['a']) >>> 对称差集更新 内置函数symmetric_difference_update返回的结果是两个集合的对称差集 >>> A = {'a','b'} >>> A.symmetric_difference_update({'b', 'd'}) #iterable的参数都可以传递 >>> A set(['a', 'd']) >>> 另一种写法是 ^= >>> A = {'a','b'} >>> A ^= {'b', 'd'} >>> A set(['a', 'd']) >>> set移除元素 remove函数: set类型有好几个内置函数用来从set中移除已有的元素,首先是remove函数,如果remove的元素不存在,会抛出 KeyError 异常。 >>> A = {'a','b'} >>> A.remove('c') Traceback (most recent call last): File "", line 1, in A.remove('c') KeyError: 'c' >>> discard函数 若要不抛出异常,可以使用discard函数 >>> A = {'a','b'} >>> A.discard('c') >>> A set(['a', 'b']) >>> pop函数 上述两个函数都是指定set中某一个元素,而pop函数无需指定元素,每次运行时会删除任意一个元素,并返回这个元素的值。当set为空时,抛出 KeyError >>> A = {'a','b'} set(['a', 'b']) >>> A.pop() 'a' >>> A.pop() 'b' >>> A.pop() Traceback (most recent call last): File "", line 1, in A.pop() KeyError: 'pop from an empty set' >>> 清空set set的内置函数 clear 用来清空set >>> A = {'a','b'} set(['a', 'b']) >>> A.clear() >>> A set([]) >>> set comprehension 与list、dict类似,set类型也能有comprehension的构造法: >>> {i for i in range(10)} set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>>