代码改变世界
[登录 · 注册]
  • python 集合操作方法详解
  • python 集合操作方法详解

    一、总结

    一句话总结:

    作用:python中的集合概率和c++等语言里面都是一样的
    定义:nums = [1,2,3,4,5,6,7] num_set = set(nums) num_set1 = {1,2,3,4,5,6,7}
    增:num_set.add(8)  
    删:set1.remove(1)

    1、集合的交并补?

    交:a = nums1&nums2 #{1, 2, 3, 4, 5}
    并:a = nums1|nums2 #{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    补:a2 = nums2-nums1 #{8, 9, 10, 7}

    二、python 集合操作方法详解

    转自或参考:python 集合操作方法详解 - 战争热诚 - 博客园
    https://www.cnblogs.com/wj-1314/p/8423273.html

     说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球

    的人都有哪些?

    play_basketball = ['a','b','c','d','e']
    play_game = ['a','b','c','f','g']
    both_play=[]
    for name in play_basketball:
        if name in play_game:
            both_play.append(name)
    print(both_play)
    结果:
    ['a', 'b', 'c']
    

      在不了解集合之前我们肯定以上面的方法解决问题,但是学了集合之后,我们就有更简单的方法了,是什么呢?让我们慢慢了解。

    集合set

      集合用于包含一组无序的对象。与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:

    1. 不重复,(互异性),也就是说集合是天生去重的
    2. 元素为不可变对象,(确定性,元素必须可hash)
    3. 集合的元素没有先后之分,(无序性)

       首先笼统的讲一下python3.x集合的内置函数有17个,分别如下:

    序号 函数 描述
    1

    add(self, *args, **kwargs)

     是把要传入的元素做为一个整个添加到集合中
    2

    clear(self, *args, **kwargs)

     清空集合里面的所有元素
    3

    copy(self, *args, **kwargs)

    复制集合里面的所有元素 ,返回一个浅复制
    4

    difference(self, *args, **kwargs)

    求两个集合里面的不同的元素 ,又称差
    5

    difference_update(self, *args, **kwargs)

     返回删除了 set “集合2”中含有的元素后的 set “集合1” 
    6

    discard(self, *args, **kwargs)

     如果在 set “集合”中存在元素 x, 则删除 
    7

    intersection(self, *args, **kwargs)

    求两个集合里面相同的元素,又称并 ,

    返回只保留含有 set “集合2”中元素的 set “集合1” 

    8

    intersection_update(self, *args, **kwargs)

     ,

    返回只保留含有 set “集合2”中元素的 set “集合1” ,并更新自己

    9

    isdisjoint(self, *args, **kwargs)

     判断两个集合是不是不相交,并返回
    10

    issubset(self, *args, **kwargs)

     判断集合是不是包含其他集合,等同于a>=b
    11

    issuperset(self, *args, **kwargs)

    判断集合是不是被其他集合包含,等同于a<=b 
    12

    pop(self, *args, **kwargs)

     删除并且返回 set “集合”中的一个不确定的元素, 如果为空则引发 KeyError 
    13

    remove(self, *args, **kwargs)

     从 set “集合”中删除元素 , 如果不存在则引发 KeyError 
    14

    symmetric_difference(self, *args, **kwargs)

     返回一个新的 set 包含 外面 和 里面 中不重复的元素

    也就是两个集合不重复的元素 

    15

    symmetric_difference_update(self, *args, **kwargs)

     返回含有 set “里面”或者 set “外面”中有而不是两者都有的元素的 set “外面” 
    16

    union(self, *args, **kwargs)

    把两个集合连接起来,又称并 
    17

    update(self, *args, **kwargs)

     可以在集合里面添加多项

    1,定义集合

    #第一种方法
    nums = [1,2,3,4,5,6,7]
    num_set = set(nums)
    print(num_set)
    结果:
    {1, 2, 3, 4, 5, 6, 7}

    #第二种方法
    num_set ={1,2,3,4,5,6,7}

      

    2,增(更新)

    set.add()  

    set.update([])

    nums = {1,2,3,4,5,6,7}
    #set.add()增加只能增加一个,不能增加多个值
    # nums.add(8)
    # print(nums)
    #set.update()可以增加一个字符串,可以增加多个值
    # nums.update([8])
    # print(nums)
    # nums.update('8')
    # print(nums)
    nums.update([8,9,10])
    print(nums)
    

      

    3,删

    set1.remove(1)

    nums = {1,2,3,4,5,6,7}
    nums.remove(7)
    print(nums)
    结果:
    {1, 2, 3, 4, 5, 6}
    

      

    4,查:无法通过下标索引

    5,改:不可变类型无法修改元素

    6,交( &)

    nums1 ={1, 2, 3, 4, 5, 6}
    nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
    #交的方式一:&
    a = nums1&nums2
    print(a)
    #并的方式二:intersaction
    b = nums1.intersection(nums2)
    print(b)
    
    结果:
    {1, 2, 3, 4, 5}
    {1, 2, 3, 4, 5}
    

      

    7,并(|)

    nums1 ={1, 2, 3, 4, 5, 6}
    nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
    #并的方式一:|
    a = nums1|nums2
    print(a)
    #并的方式二:uniom
    b = nums1.union(nums2)
    print(b)
    
    结果:
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    

      

    8,差(-)

    nums1 ={1, 2, 3, 4, 5, 6}
    nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
    #差的方式一:-
    a1 = nums1-nums2
    print(a1)
    a2 = nums2-nums1
    print(a2)
    #差的方式二:difference
    b1 = nums1.difference(nums2)
    print(b1)
    b2 = nums2.difference(nums1)
    print(b2)
    
    结果:
    {6}
    {8, 9, 10, 7}
    {6}
    {8, 9, 10, 7}
    

      

    9,对称差集(^)

    nums1 ={1, 2, 3, 4, 5, 6}
    nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
    #对称差集表示方法一:^
    a1 = nums1^nums2
    print(a1)
    #对称差集表示方法二:symmetric_difference
    a2 = nums2.symmetric_difference(nums1)
    print(a2)
    
    结果:
    {6, 7, 8, 9, 10}
    {6, 7, 8, 9, 10}
    

    10,集合转换

    se = set(range(4))
    li = list(se)
    tu = tuple(se)
    st = str(se)
    print(li,type(li))
    print(tu,type(tu))
    print(st,type(st))
    
    结果:
    [0, 1, 2, 3] <class 'list'>
    (0, 1, 2, 3) <class 'tuple'>
    {0, 1, 2, 3} <class 'str'>
    

    补充:frozenset

      冰冻集合,是一种特殊的集合类型,也是集合(集合是列表的话,冰冻集合就是元组)

      下面创建冰冻集合(一般不会创建空的冰冻集合)

      同时下面包含函数的补充

    #创建带数据的冰冻集合
    info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
    print(info,type(info))
    #成员监测
    result = 'gongzuo' in info
    print(result)
    #遍历冰冻集合
    for i in info:
        print(i)
    #集合推导式(无法得到冰冻集合,可以得到集合,列表,元组,字典类型)
    result = {i for i in info}
    print(result,type(result))
    
    #函数
    #冰冻集合可以使用集合的函数(不修改集合本身的函数都可以使用)
    info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
    
    #copy()
    result = info.copy()
    print(result)
    
    #集合操作  交集,并集,差集,对称差集等  不修改冰冻集合本身就能使用:冰冻集合的操作结果都是冰冻集合
    info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
    info2 = {'xuexi','gongzuo','kaoyan','xiuxi'}
    #冰冻集合操作
    result = info.union(info2)
    print(result)
    
    #普通集合操作(冰冻集合是参考集合)
    result = info2.union(info)
    print(result)
    

      

     
  • 【推广】 阿里云小站-上云优惠聚集地(新老客户同享)更有每天限时秒杀!
    【推广】 云服务器低至0.95折 1核2G ECS云服务器8.1元/月
    【推广】 阿里云老用户升级四重礼遇享6.5折限时折扣!
  • 原文:https://www.cnblogs.com/Renyi-Fan/p/13150190.html
走看看 - 开发者的网上家园