Python基础入门8:集合

文章目录

  • 前言
  • 集合
    • 集合的创建
    • 集合的运算操作
      • 集合元素的判断
      • 集合的新增
      • 集合的删除
    • 集合间的关系:相等,子集,超集,相交
    • 集合的数学操作-集合交、并、差、对称差


前言

本文主要介绍python程序中数据结构集合及其创建运算,集合的交并差等相关操作。本文学习材料来自马士兵Python中入门基础版(基础语法) 2020最新版Python小白教程。视频链接https://www.bilibili.com/video/BV1wD4y1o7AS?p=71


提示:以下是本篇文章正文内容,下面案例可供参考

集合

集合是python语言提供的内置数据结构,在构成方式上也称为没有值的字典, 也用花括号{}来定义,集合中元素同字典中键key一样不可重复,且元素具有无序性,也会根据hash函数进行计算后存储,与元素的输入顺序前后无关。

集合的创建

  1. 直接使用花括号
  2. 使用内置函数set(),set()函数中的参数是一个序列,该序列可以是集合类型的数据,也可以是列表、字符串、元组类型的数据。
  3. 集合生成式

  1. 使用花括号创建集合时,若输入相同的元素,则赋值后的集合会自动删除重复元素,只保留一个。
  2. 不能使用花括号创建空集合,创建出来的结果是空字典类型,只能使用set()函数来创建空集合。

代码示例

'''使用花括号创建集合'''
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
'''

集合的新增

  1. 只增加一个元素,使用add()方法
  2. 增加一个序列的元素,使用update()方法

集合的删除

  1. 调用remove()方法,删除集合中存在的元素,若集合中不存在该元素,使用remove()进行删除会报错,显示KeyError。
  2. 调用discard()方法,可删除集合中存在的元素,也可对集合中不存在元素实施删除操作,若对不存在元素实施删除不会报错,返回原来集合。
  3. 调用pop()方法,任意的删除一个元素,因为集合元素的无序性,故使用pop()方法删除元素具有任意性
  4. clear()方法清空一个集合

代码示例

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()

集合间的关系:相等,子集,超集,相交

  • 判断两个集合是否相等,可以使用运算符==或者!=
  • 判断一个集合是否是另一个集合的子集,调用issubset()方法进行判断。判断集合A是否是集合B的子集,代码语法写为:A.issubset(B)。
  • 判断一个集合是否是另一个集合的超集,可以调用issuperset()方法。判断集合A是否是集合B的超集,代码语法写为:A.issuperset(B)。

小插曲:超集的定义

定义:如果一个集合 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的真子集。

  • 判断两个集合是否有交集,可以调用isdisjoint()方法。判断集合A是否是集合B相交,代码语法写为:A.issuperset(B)。

代码示例

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

集合的数学操作-集合交、并、差、对称差

  • 集合的交集,使用intersection()方法与运算符 “&”。求集合A与集合B的交集,代码语法为:A.intersection(B)或者A&B
  • 集合的并集,使用union()方法与运算符"|"。求集合A与集合B的并集,代码语法为:A.union(B)或者A|B
  • 集合的差集,使用difference()方法与运算符"-"。求集合A相较于集合B的差集,代码语法为:A.difference(B)或者A-B,所得结果为集合A的所有元素去除A交B之后的元素。
  • 集合的对称差集,使用symmetric_difference()方法或者运算符"^",得出的结果为集合A有集合B中没有的与集合B中有集合A中没有的元素的并。
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}

你可能感兴趣的:(Python入门,python)