本文主要介绍python程序中数据结构集合及其创建运算,集合的交并差等相关操作。本文学习材料来自马士兵Python中入门基础版(基础语法) 2020最新版Python小白教程。视频链接https://www.bilibili.com/video/BV1wD4y1o7AS?p=71
提示:以下是本篇文章正文内容,下面案例可供参考
集合是python语言提供的内置数据结构,在构成方式上也称为没有值的字典, 也用花括号{}来定义,集合中元素同字典中键key一样不可重复,且元素具有无序性,也会根据hash函数进行计算后存储,与元素的输入顺序前后无关。
【注】
代码示例
'''使用花括号创建集合'''
s = {2,3,4,5,5,6,7,7}
print('s =', s,type(s))
s2 = {}
print('s2 =', s2, type(s2))
'''使用set()函数创建集合'''
s1 = set(range(6))
print('s1 =', s1, type(s1))
s3 = set()
print('s3 =', s3, type(s3))
s5 = set([1,2,3])#set()函数参数为列表
print('s5 =', s5, type(s5))
s6 = set((1,2,3))#set()函数参数为元组
print('s6 =', s6, type(s6))
s7 = set({1,2,3})#set()函数参数为集合
print('s7 =', s7, type(s7))
'''使用生成式产生集合'''
s4 = {i*i for i in range(6)}
print('s4 =', s4, type(s4))
输出结果为:
s = {2, 3, 4, 5, 6, 7} #集合元素具有不可重复性
s1 = {0, 1, 2, 3, 4, 5}
s2 = {} #使用花括号定义空集合,结果会是空字典
s3 = set()
s4 = {0, 1, 4, 9, 16, 25}
s5 = {1, 2, 3}
s6 = {1, 2, 3}
s7 = {1, 2, 3}
使用in 或 not in 判断元素是不是在集合中
s = {1,2,3,5,4}
print(4 in s)
print(4 not in s)
'''输出结果为:
True
False
'''
代码示例
s = {1,2,3,5,4}
'''集合的判断'''
print(4 in s)#返回True
print(4 not in s)#返回False
'''集合的新增'''
s.add(6)
print(s)#{1, 2, 3, 4, 5, 6}
s.update({4, 5, 6, 7, 8})
print(s)#{1, 2, 3, 4, 5, 6, 7, 8}
'''集合元素的删除'''
s.remove(4)
print(s)#{1, 2, 3, 5, 6, 7, 8}
#s.remove(9)
#print(s) 因集合中不存在9这个元素,使用remove进行删除报错,显示
'''
s.remove(9)
KeyError: 9
'''
s.discard(9)
print(s)#{1, 2, 3, 5, 6, 7, 8}9不在原集合,故而输出原集合
s.pop()
print(s)
s.pop(3)#在集合使用pop方法不能含有参数,集合中的元素是无序的,没有对应的索引,若含有参数则会报错
'''
s.pop(3)
TypeError: pop() takes no arguments (1 given)
'''
s.clear()
print(s)#输出空集合set()
小插曲:超集的定义
定义:如果一个集合 S 2 S_2 S2中的每一个元素都在集合 S 1 S_1 S1中,且集合 S 1 S_1 S1中可能包含 S 2 S_2 S2中没有的元素,则集合 S 1 S_1 S1就是 S 2 S_2 S2的一个超集,反过来, S 2 S_2 S2是 S 1 S_1 S1的子集。 S 1 S_1 S1是 S 2 S_2 S2的超集,若 S 1 S_1 S1中一定有 S 2 S_2 S2中没有的元素,则 S 1 S_1 S1是 S 2 S_2 S2的真超集,反过来 S 2 S_2 S2是 S 1 S_1 S1的真子集。
代码示例
s1 = {1,2,3,4}
s2 = {2,3,4,5,6}
s3 = {1,2,3,4,5,6}
s4 = {6,7,8}
print(s1==s2)#返回False
print(s1!=s2)#返回True
print(s1.issubset(s3))#返回Ture。读作s1是s3的子集吗?是则返回True,不是则返回False
print(s3.issuperset(s1))#返回Ture。读作s3是s1的超集吗?是则返回True,不是则返回False。
print(s1.isdisjoint(s2))#返回False。读作s1与s2不相交吗?相交则返回False,不相交则返回True
print(s1.isdisjoint(s4))#返回True。读作s1与s4不相交吗?相交则返回False,不相交则返回True
s1 = {1,2,3,4}
s2 = {2,3,4,5,6}
print(s1.intersection(s2))#交集
print(s1 & s2)
print(s1.union(s2))#并集
print(s1|s2)
print(s1.difference(s2))#差集
print(s1-s2)
print(s1.symmetric_difference(s2))#对称差
print(s1^s2)
输出结果为:
{2, 3, 4}
{2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}
{1}
{1}
{1, 5, 6}
{1, 5, 6}