在Python中,集合(set)是一种内置的数据结构,用于存储唯一的元素。集合是一个无序的、不包含重复元素的数据集合。它主要用于成员资格测试、消除重复元素以及数学上的集合操作(如并集、交集、差集等)。
创建集合
可以使用花括号{}或者set()函数来创建一个集合。
使用花括号{}创建一个集合:
>>> my_set = {1 ,2 ,3, 4}>>> my_set
{1, 2, 3, 4}
使用set()函数来创建一个集合:
>>> my_set_2 = set([1, 2, 3, 4])>>> my_set_2
{1, 2, 3, 4}
注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。
使用花括号创建集合时,如果花括号内包含的是可哈希的、且唯一的元素(如数字、字符串、元组),则创建的是集合。如果包含的是列表等可变对象,则会报错。
>>> {[1, 2, 3, 4], "hello", 12}
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
使用set()函数可以将任何可迭代对象(如列表、元组、字符串等)转换为集合,同时去除其中的重复元素。
>>> set("Morris 18845398990")
{'M', '1', '8', '4', 'r', ' ', '3', '9', '0', 'i', 'o', 's', '5'}>>> set([1, 2 ,3 ,4])
{1, 2, 3, 4}>>> set((1, 2 ,3 ,4))
{1, 2, 3, 4}
集合的基本操作
添加元素
>>> my_set
{1, 2, 3, 4}# 添加元素5,成功
>>> my_set.add(5)>>> my_set
{1, 2, 3, 4, 5}# 再次添加元素5,不成功
>>> my_set.add(5)>>> my_set
{1, 2, 3, 4, 5}
删除元素
set.remove(item):移除元素item,如果元素不存在则报错
>>> my_set.remove(3)>>> my_set.remove(3)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: 3
set.discard(item):移除元素item,如果元素不存在则不报错
>>> my_set.discard(4)>>> my_set.discard(4)>>> my_set
{1, 2, 5}
set.pop():随机移除一个元素并返回它
>>> my_set.pop()
1
清空集合
>>> my_set
{2, 5}# 清空集合
>>> my_set.clear()>>> my_set
set()
检查元素是否存在
>>> my_set = {1, 2, 3, 4}# 检查元素2是否在集合中
>>> 2 in my_set
True# 检查元素5是否在集合中
>>> 5 in my_set
False
集合的数学操作
并集
>>> {1, 2, 3} | {3, 4, 5}
{1, 2, 3, 4, 5}>>> {1, 2, 3}.union({3, 4, 5})
{1, 2, 3, 4, 5}
交集
>>> {1, 2, 3} & {3, 4, 5}
{3}>>> {1, 2, 3}.intersection({3, 4, 5})
{3}
差集
>>> {1, 2, 3} - {3, 4, 5}
{1, 2}>>> {1, 2, 3}.difference({3, 4, 5})
{1, 2}
对称差集
>>> {1, 2, 3} ^ {3, 4, 5}
{1, 2, 4, 5}>>> {1, 2, 3}.symmetric_difference({3, 4, 5})
{1, 2, 4, 5}
集合的迭代
集合中的元素是无序的,因此可以通过循环来迭代集合中的元素:
>>> for s in {1, 2, 3, 4}:
... print(s)
...
1
2
3
4
集合的常用方法
copy():拷贝一个集合
>>> my_set
{1, 2, 3, 4}>>> my_set.copy()
{1, 2, 3, 4}
difference_update(set):方法用于移除两个集合中都存在的元素。difference_update()方法与difference()方法的区别在于difference()方法返回一个移除相同元素的新集合,而difference_update()方法是直接在原来的集合中移除元素,没有返回值。
>>> my_set
{1, 2, 3, 4}>>> my_set.difference_update({2, 4, 6})>>> my_set
{1, 3}
intersection_update():用于获取两个或更多集合中都重叠的元素,即计算交集。intersection_update()方法不同于 intersection()方法,因为intersection()方法是返回一个新的集合,而intersection_update()方法是在原始的集合上移除不重叠的元素。
>>> my_set = {1, 2, 3, 4}>>> my_set.intersection_update({2, 4, 6})>>> my_set
{2, 4}
symmetric_difference_update():移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
>>> my_set = {1, 2, 3, 4}>>> my_set.symmetric_difference_update({2, 4, 6})>>> my_set
{1, 3, 6}
isdisjoint():判断两个集合是否包含相同的元素,如果没有返回True,否则返回False。
>>> {1, 2, 3, 4}.isdisjoint({2, 4, 6})
False
issubset():判断指定集合是否为该方法参数集合的子集。
>>> {1, 2}.issubset({1, 2, 3, 4})
True
issuperset():判断该方法的参数集合是否为指定集合的子集。
>>> {1, 2, 3, 4}.issuperset({1, 2})
True
update():给集合添加元素
>>> my_set = {1, 2, 3, 4}>>> my_set.update({4, 5, 6})>>> my_set
{1, 2, 3, 4, 5, 6}
len():计算集合元素个数
>>> len(my_set)
6