集合的创建
- 集合是一个无序且不重复的元素序列,可以使用{}和set()函数来创建集合,但创建一个空的集合必须用set()函数而不是{},因为用{}创建的是空的字典。
>>> a = {1,2,3} # 用{}创建集合
>>> a
{1, 2, 3}
>>> type(a)
<class 'set'>
>>> b = set([1,2,4]) # 使用函数set()创建集合
>>> b
{1, 2, 4}
>>> type(b)
<class 'set'>
集合主要的作用
- 去重
- 关系运算:并集,交集,差集,对称差集
去重
>>> list_a = [1,1,2,2,3,3,4] #一个有重复元素的列表
>>> b = set(list_a) #把列表转换成集合
>>> b
{1, 2, 3, 4} # 结果已经去除重复元素
关系运算
- 并集
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
c = a | b # 把a,b两个集合内的元素去重后合并,返回一个新的集合
d = a.union(b) # 同上
print(c)
print(d)
结果
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}
a.update(b) # 同 a |= b,把合并后的集合返回到a,也就是修改了原集合a的元素
print(a)
结果
{1, 2, 3, 4, 5, 6}
- 交集
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
c = a & b # 取a,b两个集合都有的元素,返回一个新的集合
d = a.intersection(b) # 同上
print(c)
print(d)
结果
{3, 4}
{3, 4}
# a.intersection_update(b) # 取a,b两个集合都有的元素,把结果返回到集合a,也就是修改了原集合a
a &= b # 同上
print(a)
结果
{3, 4}
- 差集
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
c = a - b # 取在集合a中有的,但集合b中没有的元素,返回一个新的集合
d = a.difference(b) # 同上
print(c)
print(d)
结果
{1, 2}
{1, 2}
# a -= b # 取在集合a中有的,但集合b中没有的元素,把结果返回到集合a中,也就是修改了原集合a
a.difference_update(b) # 同上
print(a)
结果
{1, 2}
- 对称差集也叫反向交集
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
c = a ^ b # 元素中集合a或b中,但不同时在这两个集合中,返回一个新的集合。
d = a.symmetric_difference(b) # 同上
print(c)
print(d)
结果
{1, 2, 5, 6}
{1, 2, 5, 6}
# a ^= b # 元素中集合a或b中,但不同时在这两个集合中,把结果返回到集合a,也就是修改了原集合a
a.symmetric_difference_update(b) # 同上
print(a)
结果
{1, 2, 5, 6}
集合的基本函数操作
- 添加元素
>>> a = set(['java','python','C++'])
>>> a.add('C#') # 添加一个新的元素
>>> a
{'java', 'C#', 'C++', 'python'}
>>> a.add('java') # 集合里已存在该元素,则不做任何修改
>>> a
{'java', 'C#', 'C++', 'python'}
>>> a.update([1,2]) #update可以添加多个元素
>>> a
{1, 2, 'C++', 'python', 'C#', 'java'}
- 删除元素
>>> a = set(['java','python','C++'])
>>> a.remove('java') #函数remove()删除元素java
>>> a
{'C++', 'python'}
>>> a.remove('c') # 集合中没有的元素会报错
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
a.remove('c')
KeyError: 'c'
>>> a = set(['java','python','C++'])
>>> a.discard('java') # 函数discard()删除元素
>>> a
{'C++', 'python'}
>>> a.discard('c') #discard删除集合中没有的元素不会报错
>>> a
{'C++', 'python'}
>>> a = set(['java','python','C++'])
>>> a.pop() # 函数pop()随机删除集合中的元素,并返回该元素。
'java'
>>> a
{'C++', 'python'}
set集合的 pop() 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。
- 计算集合元素个数
>>> a = set(['java','python','C++'])
>>> len(a)
3
- 清空集合元素
>>> a = set(['java','python','C++'])
>>> a.clear()
>>> a
set()
- 判断元素是否在集合中存在
>>> a = set(['java','python','C++'])
>>> 'java' in a
True
>>> 'c' in a
False
>>> 'java' not in a
False
>>> 'c' not in a
True
- 超集,子集,相同
>>> a = set([1,2,3,4])
>>> b = set([2,3])
>>> a.issuperset(b) # 判断a是否是b的超集
True
>>> b.issubset(a) # 判断b是否是a的子集
True
# 上面的函数也可以用>.<来表示
>>> a > b
True
>>> a < b
False
>>>
>>> a == b
False
>>> a != b
True