zoukankan      html  css  js  c++  java
  • 2.5.1 集合操作

    本节内容

    1,集合操作

    2,练习题

    一、 集合

    • set类型
      set数据类型:s ={11,22,33}
    • 特点:
      1,元素无序且唯一。
      2,可以存放各种数据类型。
      3,天生去重。
    • 主要作用:1,去重 2,关系测试

    数据:

    list_1 = {1, 3, 4, 5, 6, 7, 9}
    list_1 = {2,6,0,66,22,8,4}

    1,构建方法

    # 基于列表
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    # 基于字符串
    list_2 = set("hello")
    print(list_1, list_2)
    -----------------------------------
    {1, 3, 4, 5, 6, 7, 9} {'l', 'o', 'h', 'e'}

    2,集合常用操作

    s = set([3,5,9,10])      #创建一个数值集合  
    t = set("Hello")         #创建一个唯一字符的集合  
    
    a = t | s          # t 和 s的并集  
    
    b = t & s          # t 和 s的交集  
    
    c = t – s          # 求差集(项在t中,但不在s中)  
    
    d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
    
    # 基本操作:  
    
    t.add('x')            # 添加一项  
    
    s.update([10,37,42])  # 在s中添加多项  
    
    # 使用remove()可以删除一项,不存在则报错:  
    
    t.remove('H')
    
    # len(s)
    
    set 的长度  
    
    # 测试 x 是否是 s 的成员   
    
    x in s
    
    # 测试 x 是否不是 s 的成员
    
    x not in s
    
    # (子集)测试是否 s 中的每一个元素都在 t 中 ,返回bool型
    
    s.issubset(t)
    
    s <= t
    
    # (父集)测试是否 t 中的每一个元素都在 s 中,返回bool型
    
    s.issuperset(t)
    
    s >= t
    
    # 判断是否有交集,如果没有则返回true
    
    s.isdisjoint(t)
    
    # (并集)返回一个新的 set 包含 s 和 t 中的每一个元素
    
    s.union(t)
    
    s | t
    
    # (交集)返回一个新的 set 包含 s 和 t 中的公共元素
    
    s.intersection(t)
    
    s & t
    
    # (差集)返回一个新的 set 包含 s 中有但是 t 中没有的元素
    
    s.difference(t)
    
    s - t
    
    # (对称差集)返回一个新的 set 包含 s 和 t 中不重复的元素
    
    s.symmetric_difference(t)
    
    s ^ t
    
    # 返回 set “s”的一个浅复制。
    
    s.copy()
    
    # 删除集合中的一个元素,如果没有则什么也不做(比remove容错性好)。
    
    s.discard(888)

    二、 练习

    练习:寻找差异
    # 数据库中原有
    old_dict = {
        "#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 },
        "#2":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
        "#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
    }
    # cmdb 新汇报的数据
    new_dict = {
        "#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 800 },
        "#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
        "#4":{ 'hostname':c2, 'cpu_count': 2, 'mem_capicity': 80 }
    }
    1,需要删除主机:?
    2,需要新建主机:?
    3,需要更新主机:? 注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
    # 思路:先找两个结合的交集,
    # 遍历新字典的key,如果不在更新的字典中则认为是要新增的。
    # 遍历就字典的key,如果不在更新的字段中则认为是要删除的。
    old_set = set(old_dict.keys())
    update_list = list(old_set.intersection(new_dict.keys()))
    new_list = []
    del_list = []
    for i in new_dict.keys():
        if i not in update_list:
            new_list.append(i)
    for i in old_dict.keys():
        if i not in update_list:
            del_list.append(i)
    print(update_list,new_list,del_list)




  • 相关阅读:
    匿名方法
    优化从 App.config 读取配置文件
    显示(explicit )与隐式(implicit)转换操作符
    ( 转 ) 聊一聊C#的Equals()和GetHashCode()方法
    协变和逆变
    html frameset的介绍
    html <frame>标签使用
    html <table>标签信息
    html 列表相关信息
    html <form>相关表单
  • 原文地址:https://www.cnblogs.com/kakarott/p/818567e5c8e629ac3794e5cbd462a74f.html
Copyright © 2011-2022 走看看