• python学习 day6 (3月7日)


    #__author : 'liuyang'
    #date : 2019/3/7 0007
    a = ['a' , 'b' , 'c']
    b = []
    print(a is b )  # 空元组 可以  空列表 不可以
    print(tuple(a))
    
    

    题目:

    l1 = [11, 22, 33, 44, 55]
    #将此列表索引为奇数的对应元素全部删除
    #   错误示例
    for l in range(len(l1)):
        print(l)
        if l % 2==1:
            #l1.pop(l)  # 等同余下  一个是括号 一个是中括号
            del l1[l]
    print(l1)
    
    # l1 = [11, 22, 33, 44, 55]
    # del l1[1::2]
    # print(l1)
    dic = {'k1': 'v1', 'k2': 'v2',  'k3': 'v3', 'name': 'alex'}
    lis = []
    # 循环一个字典时,不能改变  字典的大小,否则会报错

    for key in dic.keys():
        # if 'k' in key:
            # del dic[key]
    
        print(key)
        if 'k' in key:
            # dic.pop(key)
            lis.append(key)
            # for li in lis:
            #     del dic[li]
    #  在后面 删除
    for li in lis:
        del dic[li]
    
    print(dic)

    同一类型

    小数据池: 理解 

    id == is  两者之间的id是否相同  (is 判断内存地址是否一样)(==判断值是否一样)

        同一内存地址

                 获取该对象的内存地址

    代码块:

        一个文件;

          交互式命令:一行代码

        同一个代码块下:字符串的缓存机制,驻留机制:

        背景:同一代码块下,遇到初始化对象命令,会实现检查字典是否有此对应关系.......

        针对的数据类型:int(float) , 大量的str , bool  ,(), None  

            None--------空列表空元组 空字符 统一指向这个内存地址

        优点:

            节省内存

            提高执行性能

    小数据池:

      不同代码块 

      在内存中,开辟两个空间.

      一个空间:-5~256

      一个空间:一定规则的字符串

        <20  个位   >-1

      针对的数据类型:int str , bool  ,(), None  

       优点:

            节省内存

            提高执行性能

    # 超出范围了

     数据类型的补充:

    int str bool   lis tuple dict                set

       (1)-------->int  (1,)------------->tuple

    int str bool  包起来  

    other ------------>    bool  

        0 ''  ()  []  {}   ------>  False  

    list <---->  tuple  包起来

    list、tuple ------>  str    sploit

    str ---------------> list、tuple    '  ',join(str)

    用三种方式创建一个字典:

    dic ={'name' : 'liuer'}

        (2)-----> {1:2, 'name':alex}   

        (3)-----> {1:alex , 2:alex , 3:alex}

     

    数据类型的补充

      (1,)

      fromkeys([1,2,3] , [])

      循环一个列表 循环一个字典时  ,不能改变他们的大小,否则会报错

    明天 : 编码进阶 文件操作  深浅copy   

    str(dict)  --------> {}

    inpre ()  '{}'      #程序员用

    print()   # 美化了

      

    回顾:字典特点:

    1.key是唯一的.

    2.key必须是可以哈希的(不可变数据类型:字符串,元组,数值)

    3.key是无序的.

    3.6中dict的元素有序是解释器的特点,不是python源码的特点.

    xxx.py

    Cpython -> 有序

    Jpython  -> 无序

    集合:set

    实际上就是一种特殊的字典.

    所有value都是None的字典,就是集合.

    对比字典和集合的特点:

    字典

    集合

    Key唯一

    元素唯一

    Key可以哈希

    元素可以哈希

    Key无序

    元素无序

    如何获取集合?

    1.手动创建集合.

    1.创建空集合

    d = {}

    创建空集合,只有一种方式:调用set函数.

    S = set()

    2.创建带元素集合

    S = {1,2,3}

    从可迭代对象中(字符串,列表,元组,字典)创建集合.

    s = set(‘abc’)

    S = set([1,2,3])

    S = set((1,2,3))

    S = set({‘name’:’Andy’,’age’:10})

    2.通过方法调用

    -> str

    -> list

    -> set

    集合的操作:

    查看集合可用的方法:

    [x for x in dir(set) if not x.startswith(‘_’)]

    ['add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update',

    'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

    增:

       add:如果元素存在,没有做任何动作.

    删:

    Pop()     :依次从集合中弹出一个元素,如果集合为空,报错

    Discard(ele) :从集合中删除指定的元素,如果不存在,什么都不执行

    Remove(ele)  :从集合中删除指定的元素,如果不存在,报错

    Clear()      :清空

    集合的四大常用操作:

    并集:union

    交集:intersection

    差集:difference

    对称差:symmetric_difference

    改(更新):

    Update :用二者的并集更新当前集合

    difference_update:用二者的差集更新当前集合

    intersection_update:用二者的交集更新当前集合

    symmetric_difference_update:用二者的对称差集更新当前集合

    判断功能:

    Isdisjoint:判断两个集合是否没有交集

    Issubset:判断当前集合是否是后者的子集

    Issuperset:判断后者是否是当前集合的子集

    集合基本没有单独取其中元素的需求.

    集合的使用场景:

    1.判断一个元素是否在指定的范围之内.

    2.方便数学上的集合操作.

    并,交,差,对称差

    有简化写法:

    并:|

    交:&

    差:-

    对称差:^

    3.对序列数据类型中的重复元素进行去重

    如果想遍历集合中的元素.

    通常用for循环.

    frozenset:冻结的集合

    最大的特点:不可变.

    ['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']

    少了添加,更新的方法.

    s = frozenset()

    s = frozenset('abcabc')

    s = frozenset([1,2,3])

    s = frozenset((1,2,3))

    s = frozenset({'name':'Andy','age':10})

    集合的四大方法:并,交,差,对称差.

    set,frozenset是否可以混用?

    可以!

    总结:

    如果两种数据类型混用,方法的主调者的类型决定了最终结果的类型.

    frozenset应用场景:

    凡是使用到不可改变的数据的场景,都是可以使用frozenset的.

    set集合的元素:必须是可以哈希的,set本身不是可以哈希.

    但是frozenset是不可变的数据.(可以哈希的),它是可以放到集合中.

    set和frozenset可以互相转换.

     浅 copy  只 copy 第一层元素  :  

    l1 = [1,2,3,[1,2]]

    l2 = l1.copy()

    改变列表里的列表(第二层)都变  改变列表里的数字  不变 

    深 copy 

    l1 = [1,2,3,[1,2]]

    l2 = l1.deepcopy()

    改变列表里的列表 不变 

    不可变得 变化 改值 开辟新的内存空间 ?

  • 相关阅读:
    最大回文子串
    找出不含重复字符的最长子串的长度
    链表表示的2个数相加
    如何胜任一个小型公司的技术总监?我的感想
    React 的坑
    MobX 学习
    摘要
    AI 帮助涂鸦
    计算机的前世今生
    常用编辑器实用技巧(pycharm、sublimeText、vim、vscode、Jupyter)
  • 原文地址:https://www.cnblogs.com/Doner/p/10488861.html
Copyright © 2020-2023  润新知