• Python基本数据结构之集合


    一道python面试的一个小问题,说怎么使用一行代码将一个列表里的重复元素,其实这里只要将列表转换成集合就可以了。

    定义

    集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,

      1. 里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存
      1. 天生去重,在集合里没办法存重复的元素
      1. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合

    基于上面的特性,我们可以用集合来干2件事,去重和关系运算

    1 li=[1,1,'li']
    2 a=set(li)  # 可变集合/‘
    3 print(a)
    4 b=set('xiaohu 123')
    5 print(b)  # set是无序不重复的 # 如果要取值 1、for循环 2、迭代器

    集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
    集合当中的交(
    1、 & 2、集合中的方法intersection()并(1、 | 2、 集合中的方法union()补(1、- 2、集合中的方法difference()差(集合中的方法symmetric_difference()
     1 pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']
     2 linuxs=['wupeiqi','oldboy','gangdan']
     3 
     4 # 求既报名python,也报名linux的学生 ,这是用for循环实现两个集合的交集-----------------------------------------------------
     5 l=[]
     6 for item in pythons:
     7     if item in linuxs:
     8        l.append(item)
     9 print(l)
    10 
    11 # 求报名了python,没有报名linux的学生-----------------------------------------------------------------------------------
    12 l=[]
    13 for item in pythons:
    14     if item not in linuxs:
    15         l.append(item)
    16 print(l)
    17 
    18 # 求所有报名的孩子的集合 1、 |   2、 集合中的方法union()----------------------------------------------------------------
    19 a=set(pythons)
    20 b=set(linuxs)
    21 s=a | b #  求两个集合的并集
    22 print(s)
    23 print(a.union(b)) # 和 | 效果一样,求两个集合的并集
    24 
    25 #  求两个集合的交集 1、 &  2、集合中的方法intersection()----------------------------------------------------------------
    26 a=set(pythons)
    27 b=set(linuxs)
    28 s= a & b
    29 print(s)
    30 print(a.intersection(b))
    31 
    32 # 求补集----------------------------------------------------------------------------------------------------------------
    33 a=set(pythons)
    34 b=set(linuxs)
    35 print(a-b) # {'biubiu', 'yuanhao', 'egon', 'alex'}
    36 print(a.difference(b)) # {'biubiu', 'yuanhao', 'egon', 'alex'}
    37 print(b-a) # {'oldboy'}
    38 print(b.difference(a)) # {'oldboy'}
    39 
    40 # 求没有同时报名python和linuxs的学生------------------------------------------------------------------------------------
    41 a=set(pythons)
    42 b=set(linuxs)
    43 print(a^b)
    44 print(a.symmetric_difference(b)) # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'}
    45 print(b.symmetric_difference(a)) # {'oldboy', 'biubiu', 'yuanhao', 'egon', 'alex'}
    
    

     集合中  >,>=,<,<= 父集,子集 (返回布尔值)

     1 set1={1,2,3,4,5}
     2 set2={1,2,3,4}
     3 
     4 print(set1 >= set2)
     5 
     6 print(set1.issuperset(set2)) # 完全包含的意思
     7 
     8 print(set2 <= set1)
     9 
    10 print(set2.issubset(set1)) # 子集

    集合里的增与删

    1、add()方法

    1 set1.add(88)  # 88是一个整体
    2 print(set1)
    3 print(set1.pop())
    4 print(set1)

      2、discard(),remove()方法

    1 set1.discard(3) # 指定值删除
    2 print(set1)
    3 set1.remove(2) # 也是指定值删除
    4 print(set1)
    3、update()方法
    1 set1.update('ops')  # 与add的区别是添加几个不重复的
    2 set1.update([123,'ooo'])
    3 print(set1)
    4、clear()方法

    1 set1.update('ops')  # 与add的区别是添加几个不重复的
    2 set1.update([123,'ooo'])
    3 print(set1)
    在集合中添加元素用.add()方法,.pop方法不指定参数,随机删除,并且有返回值
    单纯的删除:discard,remove 指定元素删除,元素不存在不报错,单纯的删除,没有返回值
    update方法谁调用更新谁的集合
    print(set('alex')==set('alexexex')) # 返回True
    print(set('alex')<set('alexwwww'))  #  返回True 因为右边包含左边
    

      

     
     
  • 相关阅读:
    单调栈
    单调队列
    线段树
    树状数组
    KMP模式匹配
    二分图最大匹配
    celery发送短信接口
    celery配置与基本使用
    celery介绍
    短信验证接口
  • 原文地址:https://www.cnblogs.com/wyh-study/p/11324144.html
Copyright © 2020-2023  润新知