集合的创建
集合是由不重复元素组成的无序容器。创建集合用 { } 大括号或 set( ) 函数。注意,创建空集合只能用 set( ) ,不能用 { } , { } 创建的是空字典。下面的例子演示了如何创建一个集合以及创建空集合。
>>> numbers = {0, 1, 2, 3, 4, 5} # 用大括号创建集合
>>> print(numbers)
{0, 1, 2, 3, 4, 5}
>>> type(numbers)
<class 'set'>
>>> letters = set('abcdefg') # 用set()函数创建集合
>>> print(letters)
{'g', 'd', 'b', 'c', 'f', 'e', 'a'}
>>> type(letters)
<class 'set'>
>>> emptySet = set() # 创建空集合
>>> print(emptySet)
set()
>>> type(emptySet)
<class 'set'>
往集合里添加元素
使用 add( ) 方法,可以往集合里添加元素。因为集合是存储无序不重复元素的容器,所以当要存入的元素已经在集合里面时,不做任何操作;当元素不存在集合里面时,才进行插入操作。下面的例子演示了如何把元素添加到集合里面。
>>> numbers = {0, 1, 2}
>>> print(numbers)
{0, 1, 2}
>>> numbers.add(3) # 往集合里面添加元素3
>>> print(numbers) # 元素3之前未在集合里,添加成功
{0, 1, 2, 3}
>>> numbers.add(0) # 往集合里面添加元素0
>>> print(numbers) # 元素0已经在集合里,不进行添加
{0, 1, 2, 3}
当然,使用 update( ) 方法,也可以往集合里添加元素。用法与 add( ) 方法类似,但 add( ) 方法不能往集合里面添加列表、元组、字典等元素,而 update( ) 方法可以。下面的例子演示了如何把列表添加到集合里面。
>>> numbers = {0, 1, 2}
>>> numbers.add([3, 4]) # 使用add()方法添加不了列表
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
numbers.add([3, 4])
TypeError: unhashable type: 'list'
>>> numbers.update([3, 4]) # 使用update()方法可以添加列表
>>> print(numbers)
{0, 1, 2, 3, 4}
从集合中删除指定元素
使用 remove( ) 方法,可以将指定元素从集合中删除。如果集合中不存在此元素,则会报错。
>>> numbers = {0, 1, 2}
>>> numbers.remove(0) # 从集合中删除元素0
>>> print(numbers)
{1, 2}
>>> numbers.remove(3) # 从集合中删除不存在的元素则报错
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
numbers.remove(3)
KeyError: 3
当然,我们更推荐使用 discard( ) 方法删除集合中指定元素,因为如果集合中不存在此元素,系统不会报错。
>>> numbers = {0, 1, 2}
>>> numbers.discard(0) # 从集合中删除元素0
>>> print(numbers)
{1, 2}
>>> numbers.discard(3) # 从集合中删除不存在的元素没有报错
>>> print(numbers)
{1, 2}
从集合中删除元素并返回其值
使用 pop( ) 方法,可以将集合中的某个元素删除,并且返回其值。如果集合为空,则会报错。
1. 如果集合的元素都是数字,删除时,删掉的是最小的数字,其余数字升序排列;
2. 如果集合的元素都是非数字,删除时,删掉的是随机的元素,其余元素随机排列。
3. 如果集合里既有数字又有非数字元素,删除时:若删掉的是数字,则一定是删掉了最小的,其他数字升序排列,非数字元素随机排列;若删掉的非数字,则一定是随机删掉了一个,其他数字升序排列,非数字元素随机排列。
>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> x = numbers.pop()
>>> print(x)
0
>>> print(numbers)
{1, 2, 3, 4, 5, 6}
获取集合中元素的个数
使用 len( ) 函数,可以求得集合中元素的个数。
>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> len(numbers)
7
删除集合中的所有元素
使用 clear( ) 方法,可以将集合元素清空。
>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> numbers.clear()
>>> print(numbers)
set()
判断元素是否在集合中
使用 in 或者 not in 操作符,可以判断元素是否在指定集合中。下面的例子演示了如何判断元素是否在集合中。
>>> numbers = {0, 1, 2, 3, 4, 5, 6}
>>> 1 in numbers
True
>>> 10 in numbers
False
集合的复制
使用 copy( ) 方法,可以复制集合。下面的例子演示了如何复制集合。
>>> numbers = {0, 1, 2}
>>> x = numbers.copy()
>>> print(x)
{0, 1, 2}
>>> id(x)
2122843999136
>>> id(numbers)
2122843998912
求并集
使用 union( ) 方法可以求出多个集合的并集,重复的元素只会出现一次。下面的例子演示了如何求出两个集合的并集。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.union(y)
>>> print(z)
{0, 1, 2, 3, 4, 5}
求差集
使用 difference( ) 方法可以求出两个集合的差集,即返回的集合元素包含在调用该方法的集合中而不包含在作为参数的集合中。下面的例子演示了如何求出两个集合的差集。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.difference(y)
>>> print(z)
{0, 1}
使用 difference_update( ) 方法也可以求出两个集合的差集,只不过这个方法会直接对原始集合进行操作,求得的差集会直接覆盖原始集合。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.difference_update(y)
>>> print(x)
{0, 1}
求交集
使用 intersection( ) 方法可以求出多个集合的交集,即返回的集合元素既包含在调用该方法的集合中又包含在作为参数的集合中。下面的例子演示了如何求出两个集合的交集。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.intersection(y)
>>> print(z)
{2, 3}
使用 intersection_update( ) 方法也可以求出多个集合的交集,只不过这个方法会直接对原始集合进行操作,求得的交集会直接覆盖原始集合。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.intersection_update(y)
>>> print(x)
{2, 3}
求对称差集
使用 symmetric_difference( ) 方法可以求对称差集,即返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> z = x.symmetric_difference(y)
>>> print(z)
{0, 1, 4, 5}
使用 symmetric_difference_update( ) 方法也求对称差集,只不过这个方法会直接对原始集合进行操作,求得的对称差集会直接覆盖原始集合。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.symmetric_difference_update(y)
>>> print(x)
{0, 1, 4, 5}
判断两个集合中是否存在相同的元素
使用 isdisjoint( ) 方法可以判断两个集合中是否存在相同的元素。如果不存在相同的元素,则返回True;存在相同的元素,则返回False。
>>> x = {0, 1, 2, 3}
>>> y = {2, 3, 4, 5}
>>> x.isdisjoint(y)
False
>>> a = {0, 1}
>>> b = {2, 3}
>>> a.isdisjoint(b)
True
判断是否为子集
使用 issubset( ) 方法可以判断当前集合是否为参数集合的子集。如果当前集合是参数集合的子集,则返回True;否则返回False。
>>> x = {0, 1}
>>> y = {0, 1, 2, 3}
>>> x.issubset(y)
True
判断是否为超集
使用 issuperset( ) 方法可以判断当前集合是否为参数集合的超集。如果当前集合是参数集合的超集,则返回True;否则返回False。
>>> x = {0, 1}
>>> y = {0, 1, 2, 3}
>>> y.issuperset(x)
True