zoukankan      html  css  js  c++  java
  • 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()

    改变列表里的列表 不变 

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

  • 相关阅读:
    73. Set Matrix Zeroes
    289. Game of Live
    212. Word Search II
    79. Word Search
    142. Linked List Cycle II
    141. Linked List Cycle
    287. Find the Duplicate Number
    260. Single Number III
    137. Single Number II
    Oracle EBS中有关Form的触发器的执行顺序
  • 原文地址:https://www.cnblogs.com/Doner/p/10488861.html
Copyright © 2011-2022 走看看