09 - 集合

一.集合的特点(set)

  • 集合(set)是一个无序的不重复元素序列:存储的顺序无序,没有下标一说

  • 所以常常将有重复元素的列表转化为集合来达到去重的效果

    list1 = [1,9,2,3,4,2,3,3,5]
    set1 = set(list1)
    print(set1)       #{1, 2, 3, 4, 5, 9}  去重且升序
    

二.集合的格式

  • 使用:

    注意:如果花括号里面的元素是成对出现的--有冒号,那么就是字典,如果是单个单个出现,就是集合

三.创建集合

  • 创建空集合只能用set():

    set1 = set()
    
  • 创建非空集合既可用set(),也可以用

    parame = {value01,value02,...}
    或者
    set1 = set(value)
    

四.集合相关操作

1.添加元素

  • add:将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作

    thisset = set(("Google", "Runoob", "Taobao"))
    thisset.add("Facebook")
    print(thisset)
    #结果:{'Taobao', 'Facebook', 'Google', 'Runoob'}
    
  • update:可以添加元素,且参数可以是列表,元组,字典等

  • 例题:

    '''
    产生5组不重复的字母数字组成的验证码
    '''
    import random
    set1 = set()
    msg = 'abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    while True:
        m = ''
        for j in range(4):
            #方法一:
            #index = random.randint(0,len(msg) - 1)
            #m += msg[index]
            #方法二:
            r = random.choice(msg)
            m += r
    
        set1.add(m)    
        if len(set1) == 5:
            break
    print(set1)
    

2.删除元素

  • remove:将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

    thisset = set("Google", "Runoob", "Taobao")
    thisset.remove("Facebook")   # 不存在会发生错误
    
  • discard:移除集合中的元素,且如果元素不存在,不会发生错误,且不做操作

    thisset.discard("Facebook")  # 不存在不会发生错误
    
  • del:删除指向集合的指针,如过集合没有其他指针指,则集合的地址空间会被释放

    del thisset
    
  • clear:清空集合元素

  • pop:删除集合集合中最后一个元素,但是由于集合是无序的,每次输出顺序可能都不一样,所以pop相当于随机删除

    thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
    x = thisset.pop()
    
    print(x)
    print(thisset)
    

3.集合独有的交集、并集、差集

  • intersection:交集

    • 用符号代替为 &
    set1 = {1,2,3,4,5}
    set2 = {3,4,5,6,7,8,9}
    newset = set1.intersection(set2)
    print(newset)             #{3, 4, 5}
    print(set1 & set2)
    
  • union:并集

    • 用符号代替为 |
    set1 = {1,2,3,4,5}
    set2 = {3,4,5,6,7,8,9}
    newset = set1.union(set2)   
    print(newset)             #{1, 2, 3, 4, 5, 6, 7, 8, 9}
    print(set1 | set2)
    
  • difference:差集

    • 用符号代替为 -
    set1 = {1,2,3,4,5}
    set2 = {3,4,5,6,7,8,9}                 
    print(set1 - set2)            #{1, 2}              
    print(set2 - set1)            #{8, 9, 6, 7}
    

    注意:不同对象调用差集的方法,得到的结果是不一样的,是根据调用者来考虑的----调用者有的而参数没有的

五.集合推导式

  • 类似于列表推导式:在列表推导式的基础上添加了一个去重的功能,返回一个集合

    list1 = [1,2,3,4,2,3,3,7,8,9,6,4,5]
    set1 = {num+1 for num in list1 if num > 5}
    print(set1)   #{8, 9, 10, 7}
    
posted @ 2021-10-14 18:51  深藏Bluee  阅读(162)  评论(1)    收藏  举报