• 数据结构


    一、 字典

        - 以键值对存储的数据形式
        - 字典原理: 将key关键字作为自变量,通过哈希函数计算出一个整数值,即为该元素的存储地址
        - 牺牲空间来节省时间
        - 如果地址出现冲突,链接发 / 开放寻址式(Python)

    1. 字典的创建

        (1) 罗列法

            字典名 = {键:值}

        (2) dict 关键字

            字典名 = dict(key = value)

            # 此处key是字符串,不需要加引号,只代表关键字

           # 只适用于key为字符串的字典创建

        (3)dict+ zip

           字典名 = dict(zip(iteral1, iteral2))

        (4) .fromkeys

           字典名.fromkeys(iteral, [default = None])

          # 返回新创建的字典,字典名来自iteral, 字典值同一为default

    
    # 方法一:
    >>> a = {1:2, 2:3, 4:23}
    
    # 方法二:
    >>> a = dict(age = 12, 性别 = '男')
    >>> a
    {'age': 12, '性别': '男'}
    
    # 方法三:
    >>> m = range(1, 5)
    >>> n = ('a', '@', 3)
    >>> dict(zip(m,n))
    {1: 'a', 2: '@', 3: 3}
    >>> dict(zip(n, m))
    {'a': 1, 3: 3, '@': 2}
    
    # 方法四:
    >>> a = {'a': 1, 3: 3, '@': 2}
    >>> a.fromkeys(a, [23,'ed'])
    {'a': [23, 'ed'], 3: [23, 'ed'], '@': [23, 'ed']}
    >>> a.fromkeys(a.values(), [23,'ed'])
    {1: [23, 'ed'], 2: [23, 'ed'], 3: [23, 'ed']}
    
    

    2. 字典的特点

         (1) 键值对是无序的,因此无法通过索引访问;
         (2) key值不能重复,重复则update;
         (3) key必须是不可变类型

    3. 字典的修改

           字典名[字典键值] = 字典值
                   --- 如果有,更新;没有,添加

    # 方法一:
    >>> a = {1:2, 2:3 4:23}
    >>> a['sa'] = 234
    >>> a
    {1: 2, 2: 3, 'sa': 234, 4: 23}
    
    # 方法二(支持添加和查找,不支持修改):
    >>> a = {1:2, 2:3 4:23}
    
    # 没有key,则添加键值对
    >>> a.setdefault(34, 's')
    's'
    >>> a
    {1: 2, 2: 3, 4: 23, 34: 's'}
    
    # 如果已有key,不修改value
    >>> a.setdefault(2, 's')
    3
    >>> a
    {1: 2, 2: 3, 4: 23, 34: 's'}
    
    # 方法三:
    # 有则改,无则添
    >>> a = {1: 2, 3: 3, 34: 's'}
    >>> b = {'a': 1, 3: 3, 34: '@'}
    >>> a.update(b)
    >>> a
    {1: 2, 34: '@', 3: 3, 'a': 1}
    
    

    4. 字典的运算

         不支持   +   *  >
         支持  ==  in, is

    5. 字典的相关方法

    (1) 添加相关

        ① .fromkeys(seq) 
            创建同值不同键的字典
            
        ② setdefault(key, value)
            - 用于给字典追加键值对,如果没有value,
            追加key-None键值对
            key不存在,追加key-value;
             已经存在,不可变value;

        ③ update((key, default=None)
            - 追加字典,对已有key更新,没有追加键值对,适用于多个   

    (2) 删除相关

        ① pop(key)
            - 删除指定键值对,返回key对应value
        ② popitem()
            - 随机删除键值对,返回被删除的键值对
        ③ clear
            清空字典


    (3) 获取相关

       get(key, '错误信息')
            - 返回value, 如果key不存在,返回指定信息


    (4) 复制相关copy

       - 所有对象的拷贝都是浅拷贝

    6. 字典的遍历

      返回迭代器

       (1) .keys()
       (2) .values()
       (3) .items()        

    7. 字典生成式

       {f(x,y) for k,v in iterator}

    	eg.
    	# 冒号生成字典
    	>>> {k:v for k,v in zip([1,2,3,4,5],[3,4,2,1,4])}
    	{1: 3, 2: 4, 3: 2, 4: 1, 5: 4}
    	# 不加冒号生成集合
    	>>> {(k,v) for k,v in zip([1,2,3,4,5],[3,4,2,1,4])}
    	{(5, 4), (3, 2), (1, 3), (4, 1), (2, 4)}
    	>>> {k+v for k,v in zip([1,2,3,4,5],[3,4,2,1,4])}
    	{9, 4, 5, 6}

    二、  集合

           - value为None的字典

    1. 集合的创建

        (1)    集合名 = {元素名1, 元素名2, ...}
        (2)    集合名 = set(iterator)
        #  空集合创建
        集合名 = {}          --- 空字典
        集合名 = set()     --- 空集合

    2. 集合的特点

        (1) 集合元素不重复
        (2) 无序
        (3) 元素为不可变类型

    3. 集合的运算

        (1) 无 * + 
            有 in is == >(父子集判断)
        (2) 差集(-),并集(|),交集(&),相对差集(^)
            s1 = {'a', 'b', 'c', 'd'}
            s2 = {'a', 'd', 'c', 'f', 'g'}
            ① 差集 --- 在被减数集合但是不在减数集合
                >>> s1 - s2
                {'b'}
                >>> s2 - s1
                {'f', 'g'}
            ②并集    --- 合并去重复
                >>> s1 | s2
                {'b', 'c', 'd', 'f', 'g', 'a'}
            ③交集 --- 同时出现
                >>> s1 & s2
                {'d', 'a', 'c'}
            ④相对差集 --- 不同时出现
                >>> s1 ^ s2
                {'b', 'f', 'g'}
        (3) 父子集判断( < 、 >)
                - 是否存在包含关系

    4. 集合的相关方法

        (1) 添加类

            .add(element)

        (2) 删除类 


            ① .remove(element)
                有则原地删除,无则报错
            ② .discard(element)
                若有则删除,不存在不报错
            ③ .pop()
                随机删除一个元素,并返回

        (3) 复制类型


            .copy()
            浅拷贝,对象不是原来的对象,和元组类型不一样


        (4) 差集(-),并集(|),交集(&),相对差集(^)


            s1 = {'a', 'b', 'c', 'd'}
            s2 = {'a', 'd', 'c', 'f', 'g'}
            ① 差集 - difference
                >>> s1.difference(s2)
                {'b'}
                # 带有'_update'代表原地修改
                >>> s1.difference_update(s2)
                >>> s1
                {'b'}
            ②    交集 - intersection
                >>> s1.intersection(s2)
                {'d', 'a', 'c'}
            
            ③    并集 - union
                >>> s1.union(s2)
                {'b', 'c', 'd', 'f', 'g', 'a'}
                >>> s1.update()
                >>> s1
                {'d', 'a', 'b', 'c'}
            ④    相对差集 - symmetric_difference
                >>> s1.symmetric_difference(s2)
                {'b', 'f', 'g'}    
            ⑤    .isdisjoint()
                - 判断交集是否为空    
            ⑥     .issubset()
                - 判断是否子集        
            ⑦    .issupperset()
                - 判断是否父集

    5. 集合的遍历

          只能通过遍历获得元素,不支持索引

    三、  容器类型数据类型转化(list, tuple, dict, set)


           > 其他转字典,使用dict关键字方法, dict(a =1, b =2, c=3)
          > 字符串、列表、元组转集合,会去除重合元素
              如果含有可变类型,则不能朱哪壶·转化为集合

        

        

  • 相关阅读:
    第06组 Alpha冲刺(3/4)
    第06组 Alpha冲刺(2/4)
    第06组 Alpha冲刺(1/4)
    第06组 团队Git现场编程实战
    第二次结对编程作业
    2019 SDN大作业
    2019 SDN上机第7次作业
    第08组 Beta版本演示
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/geoffreyone/p/9899767.html
Copyright © 2020-2023  润新知