简述:
集合(Set)是 Python 中的一种数据结构,它具有无序、不重复的特性。也就是说集合里面的元素是不可重复的,例如 s = {1, 2, 3, 1, 2, 3, 4, 5} ,实际输出会自动去重变为 {1, 2, 3, 4, 5} 。
创建集合的正确方式有几种:
可以直接用花括号括起元素来创建(但要注意不能用空花括号创建空集合,那会创建出一个空字典,创建空集合要用 set([]) ),比如 s = {1, 2, 3} 就是创建了一个包含 1、2、3 这几个元素的集合。
也可以通过 set() 函数,将可迭代对象(如列表等)转换为集合来创建,像 li = [1, 2, 3, 1, 2, 3] ,那么 s = set(li) 就能得到去重后的集合 {1, 2, 3} 。
集合的基本操作包括:
添加元素:
s = {6, 7, 8, 9} s.add(1) print(s) |
就会把元素 1 添加到集合 s 中。
s = {6, 7, 8, 9} s.update({5, 3, 2}) print(s) |
它会把给定集合中的元素都添加到原集合里。
使用 add() 方法可以向集合中添加一个元素,集合是一个无序的数据类型,添加顺序和在集合中的存储顺序不一致,例如:
还可以使用 update() 方法添加多个元素,如:
移除元素:
s = {6, 7, 8, 9} removed_element = s.pop() print(s) print(removed_element) |
会随机移除并返回集合中的一个元素,同时集合更新为移除后的状态。
s = {6, 7, 8, 9} s.remove(6) print(s) |
这里就把元素 6 从集合中移除了。
pop() 方法会随机弹出一个元素,例如:
remove() 方法用于移除指定的元素,如果元素不存在会抛出 KeyError 异常,像:
计算元素个数可以使用 len() 函数,比如:
s = {1, 2, 3} count = len(s) print(count) |
集合之间还可以进行运算,常见的运算有:
交集:可以使用 intersection() 方法或者 & 运算符来获取两个集合的交集,例如:
s1 = {1, 2, 3} s2 = {2, 3, 4} print('交集:', s1.intersection(s2)) print('交集:', s1 & s2) |
都会输出 {2, 3} ,即两个集合共有的元素组成的集合。
并集:通过 union() 方法或者 | 运算符来得到两个集合的并集,像:
s1 = {1, 2, 3} s2 = {2, 3, 4} print('并集:', s1.union(s2)) print('并集:', s1 | s2) |
输出为 {1, 2, 3, 4} ,也就是包含两个集合所有元素的集合(重复元素只保留一份,因为集合本身特性就是不重复)。
差集:使用 difference() 方法来求差集,例如:
s1 = {1, 2, 3} s2 = {2, 3, 4} print('差集:', s1.difference(s2)) print('差集:', s2.difference(s1)) |
前者输出 {1} ,表示在 s1 中但不在 s2 中的元素组成的集合;后者输出 {4} ,是在 s2 中但不在 s1 中的元素组成的集合。
此外,还有像 issuperset() (判断是否为超集)、issubset() (判断是否为子集)、isdisjoint() (判断是否没有交集)等方法来判断集合之间的包含等关系,例如:
s3 = {1, 2} s4 = {1, 2, 3} print(s4.issuperset(s3)) print(s3.issubset(s4)) print(s3.isdisjoint(s4)) |
分别会输出 True (因为 s4 包含了 s3 的所有元素,所以 s4 是 s3 的超集)、True ( s3 的元素都在 s4 中,所以 s3 是 s4 的子集)、False (因为 s3 和 s4 有共同元素,并非没有交集)。