Python中的set和其他语言类似,是一个无序不重复元素集,基本功能包括关系测试和消除重复元素。集合对象支持union(联合),intersection(交),difference(差)和sysmmetric difference(对称差集)等数学运算。
set支持x in set, len(set)和for x in set等操作。作为一个无序的集合,set不记录元素位置或者插入点,因此不支持indexing, slicing等类序列(sequence-like)的操作。
集合最重要的功能之一就是去重,即消除重复元素。列表中的元素是可以重复的,如果希望去除一个列表中的重复元素,只需要把这个列表转换成集合:
>>> a = [1,4,9,16,25,36] >>> a.insert(4,4) >>> a [1, 4, 9, 16, 4, 25, 36] >>> b = set(a) >>> b set([1, 36, 9, 16, 25, 4])
求两个集合的交集、并集和差集:
>>> c = set([16,25,49,64,81,100]) >>> b set([1, 36, 9, 16, 25, 4]) >>> c set([64, 100, 49, 16, 81, 25]) >>> b.intersection(c) # 交集 set([16, 25]) >>> b & c # 交集 set([16, 25]) >>> b.union(c) # 并集 set([64, 1, 36, 100, 81, 9, 16, 49, 25, 4]) >>> b | c # 并集 set([64, 1, 36, 100, 81, 9, 16, 49, 25, 4]) >>> b.difference(c) # 差集(元素在b中不在c中) set([1, 36, 4, 9]) >>> b - c # 差集(元素在b中不在c中) set([1, 36, 4, 9]) >>> c.difference(b) # 差集(元素在c中不在b中) set([64, 49, 100, 81]) >>> c - b # 差集(元素在c中不在b中) set([64, 49, 100, 81]) >>> b.symmetric_difference(c) # 对称差集(元素不同时出现在两个集合中) set([64, 49, 100, 1, 81, 4, 9, 36]) >>> b ^ c # 对称差集(元素不同时出现在两个集合中) set([64, 49, 100, 1, 81, 4, 9, 36]) >>> b.difference_update(c) # 用只在b中不在c中的元素更新b >>> b set([1, 36, 9, 4]) >>> c set([64, 100, 49, 16, 81, 25])
向集合中添加元素:
>>> b set([1, 36, 9, 4]) >>> b.add(16) # 向b中添加元素16 >>> b.add(25) # 向b中添加元素25 >>> b set([1, 36, 9, 16, 25, 4]) >>> b.update(c) # 将c中所有元素(不包括与b中元素重复的)添加到b中 >>> b set([64, 1, 36, 100, 81, 9, 16, 49, 25, 4])
包含关系:
True >>> 121 not in c True >>> c.issubset(b) # c是b的子集 True >>> b.issuperset(c) # b是c的超集 True >>> b > c True
从集合中删除元素:
>>> b set([64, 1, 36, 100, 81, 9, 16, 49, 25, 4]) >>> b.remove(121) # 用remove删除不属于集合的元素会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 121 >>> b.discard(121) # 用discard删除不属于集合的元素不会有任何事情发生 >>> b set([64, 1, 36, 100, 81, 9, 16, 49, 25, 4]) >>> b.discard(49) >>> for m in (64, 81, 100): b.discard(m) ... >>> b set([1, 36, 9, 16, 25, 4])
时间: 2024-10-09 12:23:43