一篇搞定python基础(十)

举报
rivers 发表于 2022/04/17 08:06:36 2022/04/17
【摘要】 python基础(十),本篇文章意在介绍集合的概念。它python内置数据结构,与列表、字典一样都属于可变序列,集合是没有value的字典

二十五、集合

25.1、集合的概述与创建

''''''
'''集合:python语言中的内置数据结构,与列表、字典一样都属于可变序列,集合是没有value的字典'''
'''集合的创建方式,第一种,使用{}'''
s={2,3,4,5,5,6,7,7}#集合中的元素不允许重复
print(s,type(s))

结果为:
{2, 3, 4, 5, 6, 7} <class 'set'>

'''第二种,使用内置函数set()'''
s1=set(range(6))
print(s1,type(s1))
s2=set([1,2,4,5,5,5,6,6])#将列表中的元素转成了集合类型,同时去掉了重复的元素
print(s2,type(s2))
s3=set((1,2,4,4,5,65))#将元组中的元素转成了集合类型,同时去掉了重复的元素
print(s3,type(s3))#你会发现65跑到前面去了,进一步可以证明集合中的元素是无序的
s4=set('python')
print(s4,type(s4))#你会发现输出的顺序颠倒了,所以集合中的元素是无序的
s5=set({12,4,34,55,66,44,4})
print(s5,type(s5))

结果为:
{0, 1, 2, 3, 4, 5} <class 'set'>
{1, 2, 4, 5, 6} <class 'set'>
{65, 1, 2, 4, 5} <class 'set'>
{'h', 'n', 'o', 'y', 't', 'p'} <class 'set'>
{34, 66, 4, 55, 12, 44} <class 'set'>

'''定义一个空集合'''
s6=set()
print(s6,type(s6))

结果为:
set() <class 'set'>

25.2、集合的相关操作

  • 集合元素的判断

    '''集合元素的判断操作'''
    s={10,20,30,405,60}
    print(10 in s)
    print(100 in s)
    print(10 not in s)
    print(100 not in s)
    
    结果为:
    True
    False
    False
    True
    
  • 集合元素的新增

    '''集合元素的新增操作'''
    s={10,20,30,405,60}
    s.add(80)#添加一个元素
    print(s)
    s.update({200,300,400})#添加多个元素
    print(s)
    s.update([100,99,8])
    s.update((78,64,56))
    print(s)
    
    结果为:
    {80, 20, 405, 10, 60, 30}
    {200, 10, 300, 80, 400, 20, 405, 60, 30}
    {64, 99, 100, 200, 8, 10, 300, 78, 80, 400, 20, 405, 56, 60, 30}
    
  • 集合元素的删除

    '''集合元素的删除操作'''
    s={64, 99, 100, 200, 8, 10, 300, 78, 80, 400, 20, 405, 56, 60, 30}
    s.remove(100)#删除指定的元素
    print(s)
    #s.remove(500)#元素不存在就报错KeyError: 500
    
    结果为:
    {64, 99, 200, 8, 10, 300, 78, 80, 400, 20, 405, 56, 60, 30}
    
    
    
    s.discard(500)#元素不存在也不报错,无所谓的样子
    s.discard(300)#元素存在就直接删除了
    print(s)
    
    结果为:
    {64, 99, 200, 8, 10, 78, 80, 400, 20, 405, 56, 60, 30}
    
    s.pop()#随便删除一个元素
    #s.pop(200)#pop()方法不可以指定参数,指定参数就会报错TypeError: pop() takes no arguments (1 given)
    print(s)
    
    结果为:
    {99, 200, 8, 10, 78, 80, 400, 20, 405, 56, 60, 30}
    
    s.clear()#清空所有元素
    print(s)
    
    结果为:
    set()
    

25.3、集合间的关系

'''集合间的关系'''
'''两个集合是否相等(元素相同就相等)'''
s={10,20,30,40}
s1={20,30,10,40}
print(s==s1)
print(s!=s1)

结果为:
True
False

'''一个集合是否是另一个集合的子集'''
s2={10,20,30,40,50,60}
s3={10,20,30,40}
s4={10,20,90}
print(s3.issubset(s2))#s3是否是s2的子集
print(s4.issubset(s2))

结果为:
True
False

'''一个集合是否是另一个集合的超集'''
print(s2.issuperset(s3))#s2是否是s3的超集
print(s2.issuperset(s4))

结果为:
True
False

'''两个集合是否含有交集'''
print(s3.isdisjoint(s4))#s3和s4是否有交集,有交集为False,没有交集为True

结果为:
False

25.4、集合的数据操作

'''集合的数据操作'''
'''交集'''
s1={10,20,30,40}
s2={20,30,40,50,60}
print(s1.intersection(s2))#s1与s2的交集
print(s1&s2)#intersection和&等价,交集操作

结果为:
{40, 20, 30}
{40, 20, 30}

'''并集'''
print(s1.union(s2))#s1与s2的并集
print(s1|s2)#union和|等价,并集操作

结果为:
{40, 10, 50, 20, 60, 30}
{40, 10, 50, 20, 60, 30}

'''差集'''
print(s1.difference(s2))#s1与s2的差集,可以用s1和s2的并集减去s2
print(s1-s2)#difference和-等价,差集操作

结果为:
{10}
{10}

'''对称差集'''
print(s1.symmetric_difference(s2))#s1和s2的对称差集,可以用s1和s2的并集减去s1和s2的交集
print(s1^s2)#symmetric_difference和^等价,对称差集操作

结果为:
{50, 10, 60}
{50, 10, 60}

25.5、集合生成式

'''集合生成式'''
s={i*i for i in range(6)}
print(s)

结果为:
{0, 1, 4, 9, 16, 25}

25.6、列表、字典、元组、集合总结

----------------列表、字典、元组、集合总结-----------------
  数据结构     是否可变     是否重复     是否有序    定义符号
-------------------------------------------------------
  列表(list)   可变        可重复       有序        []
-------------------------------------------------------
  元组(tuple)  不可变      可重复        有序        ()
-------------------------------------------------------
  字典(dict)   可变       键不可重复,    无序      {key:value}
                          值可重复
-------------------------------------------------------
  集合(set)    可变        不可重复       无序      {}
-------------------------------------------------------
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。