一、集合
集合是一个无序的不重复元素序列。
1. 集合的基本操作
1. 1集合的创建
可以使用大括号{}或者set()函数创建集合。创建一个空集合必须使用set{},而不是{},因为{}是用来创建一个空字典。
>>> a = {1, 3, 2, 4, 5, 1, 2, 1, 2} #集合主要用户成员资格检查,因此将忽略重复的元素
>>> a
{1, 2, 3, 4, 5}
>>> set(range(5))
{0, 1, 2, 3, 4}
1.2 集合的成员资格检查
>>> a = {1, 2, 3, 4, 5}
>>> 1 in a
True
>>> 6 in a
False
2.集合间的运算
集合是可变的,因此不能用作字典中的键。集合只能包含不可变(可散列)的值,因此不能包含其他集合。
集合支持一系列标准操作,包括交集、并集、差集和对称差集。
>>> a = {1, 2, 3, 4}
>>> b = {3, 4, 5 ,6}
>>> a.intersection(b) #集合a和b中都包含的元素,等价于a & b
{3, 4}
>>> a.union(b) #集合a或b中包含的所有元素,等价于a | b
{1, 2, 3, 4, 5, 6}
>>> a.difference(b) #集合a中包含而集合b中不包含的元素,等价于a - b
{1, 2}
>>> a.symmetric_difference(b) #不同时包含于a和b的元素,等价于a ^ b
{1, 2, 5, 6}
>>> a & b
{3, 4}
>>> >>> a | b
{1, 2, 3, 4, 5, 6}
>>> a - b
{1, 2}
>>> a ^ b
{1, 2, 5, 6}
3. 集合的函数
3.1 len()函数
返回集合中包含的元素个数(重复的会忽略)
>>> a = {1, 2, 3, 4, 5, 1, 2}
>>> len(a)
5
3.2 max/min()函数
返回集合中最大/最小的元素
>>> a = {1, 2, 3, 4, 5}
>>> max(a)
5
>>> min(a)
1
3.3 set()函数
将其他序列转换为集合,若为字典,只返回其键
>>> set((1, 2, 3))
{1, 2, 3}
>>> set('python')
{'o', 'n', 'y', 't', 'p', 'h'}
>>> set([1, 3, 2])
{1, 2, 3}
>>> set({1, 2, 3})
{1, 2, 3}
>>> set({'a':1, 'b':2})
{'b', 'a'}
3.4 sorted()函数
sorted()函数并不会修改集合
>>> s1 = {1, 2, 3 ,4 ,5}
>>> s2 = sorted(s)
>>> s1
{1, 2, 3, 4, 5}
>>> s2
[1, 2, 3, 4, 5]
4. 集合的方法
方法 | 描述 |
add | 将元素添加到集合中。如果元素已存在,则不进行任何操作 |
update | 添加元素,且参数可以是列表、元组、字典等 |
remove | 移除集合中指定元素。如果元素不存在,则会发生错误 |
discard | 移除集合中的元素。如果元素不存在,不会发生错误 |
pop | 随机删除集合中的一个元素,并且返回这个元素 |
clear | 清空集合 |
copy | 用于拷贝集合 |
intersection | 返回两个集合的交集 |
union | 返回两个集合的并集 |
difference | 返回两个集合的差集 |
symmetric_difference | 返回两个集合中不重复的元素集合 |
issubset | 判断指定集合是否为该方法参数集合的子集 |
issuperset | 判断该方法的参数集合是否为指定集合的子集 |
3.1 add()方法
用于为集合添加单个元素,若已经存在,不进行任何操作
>>> s1 = {1, 2, 3 ,4 ,5}
>>> s1.add(7)
>>> s1
{1, 2, 3, 4, 5, 7}
>>> s1.add(1)
>>> s1
{1, 2, 3, 4, 5, 7}
3.2 update()方法
为集合添加元组,且参数可以是集合、列表、元组、字典、字符串等。若要添加的元素存在,不进行任何操作
>>> s1 = {1, 2}
>>> s1.update([3, 4])
>>> s1
{1, 2, 3, 4}
>>> s1.update((5, 6))
>>> s1
{1, 2, 3, 4, 5, 6}
>>> s1.update({7, 8})
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8}
>>> s1.update('py')
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 'y', 'p'}
>>> s1.update({'a':10,'b':20})
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 'y', 'b', 'p', 'a'}
3.3 remove()方法
用于移除集合中指定元素。若元素不存在,则会报错
>>> s1 = {1, 2, 3}
>>> s1.remove(1)
>>> s1
{2, 3}
>>> s1.remove(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
3.4 discard()方法
类似于remove()方法,也用于移除集合中指定元素。但是若元素不存在,不会会报错
>>> s1 = {1, 2, 3}
>>> s1.discard(1)
>>> s1
{2, 3}
>>> s1.discard(1)
>>> s1
{2, 3}
3.5 pop()方法
随机删除集合中的一个元素,并且返回这个元素
>>> s1 = {3, 1, 6, 4, 7, 10}
>>> s1.pop()
1
>>> s1.pop()
3
>>> s1
{4, 6, 7, 10}
3.6 clear()方法
用于清空集合
>>> s1 = {1, 2, 3 ,4}
>>> s1.clear()
>>> s1
set()
del()也可以用于删除集合,但会连同这个变量也删除
>>> s1 = {1, 2, 3 ,4}
>>> del(s1)
>>> s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's1' is not defined
3.7 copy()方法
用于拷贝集合
>>> s1 = {1, 2, 3 ,4}
>>> s2 = s1.copy() #这个copy()方法貌似有返回值
>>> s1
{1, 2, 3, 4}
>>> s2
{1, 2, 3, 4}
3.8 intersection()方法
返回两个集合的交集,等价于a & b
>>> a = {1, 2, 3, 4}
>>> b = {3, 4, 5 ,6}
>>> a.intersection(b)
{3, 4}
3.9 union()方法
返回两个集合的并集,等价于a | b
>>> a = {1, 2, 3, 4}
>>> b = {3, 4, 5 ,6}
>>> a.union(b)
{1, 2, 3, 4, 5, 6}
3.10 difference()方法
返回两个集合的差集,等价于a - b
>>> a = {1, 2, 3, 4}
>>> b = {3, 4, 5 ,6}
>>> a.difference(b)
{1, 2}
3.11 symetric_difference()方法
返回两个集合中不重复元素的集合,等价于a ^ b
>>> a = {1, 2, 3, 4}
>>> b = {3, 4, 5 ,6}
>>> a.symmetric_difference(b)
{1, 2, 5, 6}
3.12 issubset()方法
判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False
>>> s1 = {1, 2, 3 ,4}
>>> s2 = {1, 2}
>>> s3 = {1, 5}
>>> s2.issubset(s1)
True
>>> s3.issubset(s1)
False
3.13 issuperset()方法
用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False
>>> s1 = {1, 2, 3 ,4}
>>> s2 = {1, 2}
>>> s3 = {1, 5}
>>> s1.issuperset(s2)
True
>>> s1.issuperset(s3)
False