一、集合的基本操作
集合(Set)是一种Python基本数据类型,是一种无序、可变的数据类型,它是由唯一的、不可变的元素组成的。
集合使用大括号{}来表示,元素之间使用逗号,分隔。
集合中的元素具有唯一性,不能重复,它会自动去除重复的元素。
集合中的元素是无序的,不能通过索引访问。
集合的主要特点是元素的唯一性和无序性。由于集合中的元素不重复,所以可以用于去除列表或其他可迭代对象中的重复元素。
集合还支持一些常见的集合操作,例如并集、交集、差集和对称差集等。
集合在处理需要快速检查元素是否存在的场景中非常有用,因为集合使用了散列表(Hash Table)来实现,可以在平均时间复杂度为O(1)的时间内进行元素的查找。
1、创建集合
可以使用花括号{}和set函数来创建集合。
1. 使用花括号`{}`并提供元素来创建一个非空集合,示例如下:
my_set = {1, 2, 3, 4, 5}
print(my_set) # 输出:{1, 2, 3, 4, 5}
需要注意的是,如果使用花括号{}来创建一个空的集合,会被解释为创建一个空的字典。要创建一个空的集合,应该使用set()函数:
2. 使用set()函数创建集合时,可以将一个可迭代对象(如列表、元组)作为参数传递给set()函数,该函数会将可迭代对象中的元素添加到集合中。示例如下:
my_set = set([1, 2, 3, 4, 5])
print(my_set) # 输出:{1, 2, 3, 4, 5}
需要注意的是,set()函数创建的集合是无序的,不会保留元素的插入顺序。
2、向集合中添加元素
要向集合中添加元素,可以使用`add()`方法或`update()`方法。这两个方法都可以用于向集合中添加一个或多个元素。
1. 使用`add()`方法添加单个元素到集合中。
如果添加的元素已经存在于集合中,`add()`方法不会产生任何效果,集合保持不变。示例如下:
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 输出:{1, 2, 3, 4}
my_set.add(3) # 添加已存在的元素,集合保持不变
print(my_set) # 输出:{1, 2, 3, 4}
2. 使用`update()`方法可以向集合中添加多个元素。
可以提供一个可迭代对象(如列表、元组或集合)作为参数,`update()`方法会将可迭代对象中的元素添加到集合中。示例如下:
my_set = {1, 2, 3}
my_set.update([4, 5, 6])
print(my_set) # 输出:{1, 2, 3, 4, 5, 6}
my_set.update({3, 4, 5}) # 添加已存在的元素,集合保持不变
print(my_set) # 输出:{1, 2, 3, 4, 5, 6}
需要注意的是,添加方法会直接修改原始集合,而不是返回一个新的集合。
3、删除集合中的元素
要删除集合中的元素,可以使用`remove()`、`discard()`或`pop()`方法。这些方法都可以用于删除集合中的元素,但在使用时需要注意它们的行为略有不同。
1. `remove()`方法用于删除指定元素。
如果元素存在于集合中,它将被删除;如果元素不存在,`remove()`方法会引发`KeyError`异常。示例如下:
my_set = {1, 2, 3, 4, 5}
my_set.remove(3)
print(my_set) # 输出:{1, 2, 4, 5}
my_set.remove(6) # 引发 KeyError: 6
2. `discard()`方法也用于删除指定元素。
与`remove()`方法不同的是,如果元素不存在于集合中,`discard()`方法不会引发任何异常,而是保持集合不变。示例如下:
my_set = {1, 2, 3, 4, 5}
my_set.discard(3)
print(my_set) # 输出:{1, 2, 4, 5}
my_set.discard(6) # 不引发异常,集合保持不变
3. `pop()`方法用于删除集合中的任意一个元素并返回它。
由于集合是无序的,因此无法确定将删除哪个元素。如果集合为空,`pop()`方法会引发`KeyError`异常。示例如下:
my_set = {1, 2, 3, 4, 5}
popped_element = my_set.pop()
print(popped_element) # 输出:随机一个元素,例如 1
print(my_set) # 输出:删除了一个元素后的集合
empty_set = set()
empty_set.pop() # 引发 KeyError: 'pop from an empty set'
需要注意的是,与添加方法类似,这些删除方法也会直接修改原始集合,而不是返回一个新的集合。
4、其它操作
集合还提供了一些其他常用的方法,包括`len()`、`in`操作符和`clear()`方法。
1. `len()`方法用于返回集合中元素的数量。示例如下:
my_set = {1, 2, 3, 4, 5}
print(len(my_set)) # 输出:5
2. `in`操作符可以用于检查集合中是否包含某个元素。
如果元素存在于集合中,返回`True`;否则返回`False`。示例如下:
my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # 输出:True
print(6 in my_set) # 输出:False
3. `clear()`方法用于清空集合,即删除集合中的所有元素,使其变为空集合。示例如下:
my_set = {1, 2, 3, 4, 5}
my_set.clear()
print(my_set) # 输出:set()
二、集合的属性方法
可以使用dir(set)函数,打印输出集合set的所有属性和方法。
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
根据每种方法的用途可以分为如下几类:
- 增:add、update
- 删:pop、remove、dicard、clear
- 改:无(集合是无序的)
- 查:无(集合是无序的)
- 集合运算:union、intersection、difference
- 其它:copy
1、向集合中添加元素(add、update)
1. `add()` 方法:用于向集合中添加单个元素。如果集合中已经存在相同的元素,则不会进行任何操作,因为集合中的元素必须是唯一的。
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 输出: {1, 2, 3, 4}
my_set.add(3)
print(my_set) # 输出: {1, 2, 3, 4} (3已存在,不会重复添加)
请注意,`add()` 方法只接受单个元素作为参数。
2. `update()` 方法:用于向集合中添加多个元素,接受一个可迭代对象作为参数,例如列表、元组或集合。`update()` 方法会将可迭代对象中的元素逐个添加到集合中,并确保集合中的元素唯一。
my_set = {1, 2, 3}
my_set.update([3, 4, 5])
print(my_set) # 输出: {1, 2, 3, 4, 5}
综上所述,使用 add()
方法可以添加单个元素,使用 update()
方法可以添加多个元素或其他集合。
2、删除集合中元素(pop、remove、dicard、clear)
1. `pop()` 方法:用于从集合中随机删除并返回一个元素。由于集合是无序的,因此无法确定要删除的具体元素,但它会返回被删除的元素。如果集合为空,`pop()` 方法会引发 `KeyError` 错误。
my_set = {1, 2, 3, 4, 5}
x = my_set.pop()
print(x) # 输出:一个集合中的随机元素,例如:3
print(my_set) # 输出:剩下的元素:{1, 2, 4, 5}
2. `remove()` 方法:用于从集合中删除指定的元素。如果元素存在于集合中,它将被删除;如果元素不存在于集合中,`remove()` 方法会引发 `KeyError` 错误。
my_set = {1, 2, 3, 4, 5}
my_set.remove(3)
print(my_set) # 输出:{1, 2, 4, 5}
3. `discard()` 方法:用于从集合中删除指定的元素。如果元素存在于集合中,它将被删除;与 `remove()` 不同,`discard()` 不会在删除不存在的元素时引发错误。
my_set = {1, 2, 3, 4, 5}
my_set.discard(3)
print(my_set) # 输出:{1, 2, 4, 5}
my_set.discard(6)
print(my_set) # 输出:{1, 2, 4, 5} (删除了不存在的元素,不会引发错误)
4. `clear()` 方法:用于从集合中删除所有的元素,使集合变为空集。
my_set = {1, 2, 3, 4, 5}
my_set.clear()
print(my_set) # 输出:set() 一个空集
请注意,以上方法都是原地修改集合对象,即修改集合本身,而不是创建一个新的集合。
3、集合运算(union、intersection、difference、symmetric_difference)
1. 并集(Union):将两个集合中的所有元素合并到一个新的集合中,重复的元素只保留一个。可以使用`|`操作符或`union()`方法实现。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1 | set2
# 或者
union_set = set1.union(set2)
print(union_set) # 输出: {1, 2, 3, 4, 5}
2. 交集(Intersection):获取两个集合中共有的元素,即两个集合中都存在的元素。可以使用`&`操作符或`intersection()`方法实现。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
intersection_set = set1 & set2
# 或者
intersection_set = set1.intersection(set2)
print(intersection_set) # 输出: {3}
3. 差集(Difference):从第一个集合中删除和第二个集合中相同的元素,保留剩下的元素。可以使用`-`操作符或`difference()`方法实现。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
difference_set = set1 - set2
# 或者
difference_set = set1.difference(set2)
print(difference_set) # 输出: {1, 2}
4. 对称差(Symmetric Difference):获取两个集合中所有不重复的元素,即两个集合中独有的元素。可以使用`^`操作符或`symmetric_difference()`方法实现。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
symmetric_difference_set = set1 ^ set2
# 或者
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # 输出: {1, 2, 4, 5}
通过这些集合运算,可以对集合进行灵活的操作并得到想要的结果。注意,集合运算不会修改原有的集合,而是返回一个新的集合。
reference: