Python 学习之路——集合(set)
集合是Python里一个无序的不重复元素序列。
一、创建集合
集合和列表基本一致,但是集合具有以下几个特点:
1.集合只能存储不可变对象
2.集合中存储的对象是无序的
3.集合中不能出现重复的元素
1
2
3
4
5
6
| # 方式一
set1 = {'set'}
# 方式二
set2 = set() # 创建一个空字典
# set()函数中可以传递一个可迭代对象
set3 = set('set') # ser3 = {'s', 'e', 't'}
|
二、访问集合的值
1. 通过索引访问
集合作为一种无序的序列,是不能够通过索引直接访问的,要想通过索引访问,只能先将它转化为其他有序序列,如元组和列表。并且由于集合是无序的,通过索引访问的时候也并非是按照存入的顺序。
1
2
3
| set1 = {'P', 'y', 't', 'h', 'o', 'n'}
print(list(set1)[0])
print(tuple(set1)[0])
|
2. 遍历集合
集合作为一种无序的序列,虽然不能通过索引访问,但是作为一种序列,依然可以使用for语句进行遍历。注意:遍历结果也是无序的。
1
2
3
| set1 = {'P', 'y', 't', 'h', 'o', 'n'}
for i in set1:
print(i)
|
三、集合的特殊操作
1. 判断元素是否在集合内部
1
2
3
| set1 = {'P', 'y', 't', 'h', 'o', 'n'}
'P' in set1 # True
'P' not in set1 # False
|
2. 集合的运算
假设有集合A和集合B:
(1) 交集
找集合A和和集合B中共有的元素就是求A和B的交集。
1
2
3
| set1 = {1,2,3,4,5}
set2 = {3,4,5,6,7}
set3 = set1 & set2 # set3 = {3, 4, 5}
|
(2) 并集
找集合A和和集合B中所有的元素就是求A和B的交集。
1
2
3
| set1 = {1,2,3,4,5}
set2 = {3,4,5,6,7}
set3 = set1 & set2 # set3 = {1, 2, 3, 4, 5, 6, 7}
|
(3) 差集
所有属于A且不属于B的元素的集合被称为A与B的差集。
1
2
3
| set1 = {1,2,3,4,5}
set2 = {3,4,5,6,7}
set3 = set1 - set2 # set3 = {1, 2}
|
(4) 异或集
集合A和集合B中除去相同元素后剩下的元素的集合叫做A和B的异或集。
1
2
3
| set1 = {1,2,3,4,5}
set2 = {3,4,5,6,7}
set3 = set1 ^ set2 # set3 = {{1, 2, 6, 7}
|
(5) 子集与真子集
如果集合A中包含有集合B的所有元素且含有集合B没有的元素,那么集合B就是集合A的真子集。如果集合A和集合B中元素相同,就是子集。空集是任意非空集合的真子集。
1
2
3
4
| set1 = {3,4,5}
set2 = {3,4,5,6,7}
set1 < set2 # True
set1 <= set2 # True
|
(6) 超集与真超集
集合A中的每一个元素都在集合B中,且集合A中可能包含B中没有的元素,则集合A就是B的一个超集,反过来,B是A的子集。 A是B的超集,若A中一定有B中没有的元素,则A是B的真超集,反过来B是A的真子集。
1
2
3
4
| set1 = {3,4,5}
set2 = {3,4,5,6,7}
set2 > set1 # True
set2 >= set1 # True
|
四、集合常用函数
1. 求取集合中元素个数
1
2
3
4
5
| set1 = {1,2,3,4,5}
# len()函数可以用来求取集合中元素个数
len(set1) # 5
# 魔术方法 面向对象
set1.__len__() # 5
|
2. 删除集合
1
2
3
4
5
| set1 = {1,2,3,4,5}
# del()函数可以删除整个集合并回收地址
del set1
# 因为set1已经被回收了,所以调用时会报错
print(set1) # NameError: name 'set1' is not defined
|
五、集合常用方法
1. 添加元素(add)
1
2
3
| set1 = {1,2,3,4,5}
# add()方法可以向集合中添加元素
set1.add(6) # set1 = {1,2,3,4,5,6}
|
2. 清空集合(clear)
1
2
3
| set1 = {1,2,3,4,5}
# clear()方法可以清空集合
set1.clear() # set1 = {}
|
3. 随机删除集合中的元素(pop)
1
2
3
| set1 = {1,2,3,4,5}
# pop()方法会随机删除集合中一个元素并返回删除的元素
set1.pop()
|
4. 删除集合中的指定元素(remove)
1
2
3
4
5
| set1 = {1,2,3,4,5}
# remove()方法会删除集合指定元素
set1.remove(5) # set1 = {1,2,3,4}
# 当删除元素不在集合中时会抛出异常
set1.remove(6) # KeyError: 6
|