• Python自娱—6.列表


    列表是可变数据类型

    将列表传递给函数时,由于列表是可变数据类型,所以列表的内容可能会在函数调用后改变

    列表不仅可存放不同类型数据,还可存放大量数据.32位5亿,64位1152921504606846975


    创建列表

    >>> lis = list()                    # 只能创建空列表
    >>> lis = list([])
    >>> lis = []
    >>> lis = list(range(x))            # 脑子要爆,2是直接生成列表,3是迭代器?
    >>> lis = list("abcdefg")
    

     

    增删改查

    >>> lis.append()                 # 将元素添加到列表尾部
    >>> lis.extend()                 # 将所有元素迭代追加到列表中
    >>> lis.insert(index,object)     # 将元素插入指定下标
    
    ● 以上打印返回none;打印源列表有变;append效率高于insert
    
    >>> lis.pop(index)               # 删除给定位置元素,返回删掉元素;默认删最后一个
    >>> lis.remove(object)           # 删除列表中第一次出现的给定元素;不存在默认
    >>> lis.clear()                  # 清空
    >>> del lis[index]               # 可以切片删
    
    >>> lis[index] = object          # 替换元素,可以切片,迭代的替换
    
    >>> lis.index(object)            # 返回元素出现第一个下标
    >>> lis.count(object)            # 元素出现次数
    

     

    切片和排序

    - 列表里同时有str和int不能排序
    
    >>> lis.reverse()                   # 将列表中元素倒序
    >>> lis.sort()                      # 升序排序
    >>> lis.sort(reverse=True)          # 降序排序
    
    >>> lis = sorted(lis, key=object)   # 创建排序后的列表
    | >>> def func(name):
    |         return len(name)
    | >>> lis = sorted(lis, key=func)
    | >>> lis = sorted(lis, key=lambda name:(len(name)))
    
    ● sort和sorted都可以加参数key
    
    ● sort和reverse是list自带的方法,作用在旧列表上
    
    ● sorted和reversed是内建函数;sorted返回新列表,reversed返回迭代器
    

     

    三元表达式和列表推导式

    >>> lis1 = [1, 2, 3, 4, 5]
    
    >>> for i in lis1:
            lis2.append(i)
    
    >>> lis2 = [i for i in lis1]          # 列表推导式   
    ● 列表直接赋值给新表的结果是修改原列表,新列表也会变
    
    >>> lis = [i for i in range(30) if i % 3 == 0]              # 三元表达式
    
    >>> lis3 = [j for i in lis for j in i if j.count("e") == 2]
    ● 列表推导式的结果是一个生成器。不加括号报错,加中括号转list,加小括号就是生成器
    ● 测试生成器generator可以直接加中括号强转,iterator不能加中括号强转
    ● generator == []   iterator == list()
    

     

    列表复制

    >>> lis2 = lis1 + []
    
    >>> lis2 = [x for x in lis1]
    

     

    垃圾回收机制

    - GC是python自带的垃圾回收机制
    
    - 1.引用计数
    | 赋值给变量名,包括将变量名赋值给其他变量名,都是直接引用
    | 把变量名存放到列表等容器类数据类型中,就是间接引用
    | 容器中存放的是元素的内存地址
    
    - 2.标记清除
    | del 变量名
    | 将变量名指向其他变量
    | 实际的标记清除机制是在内存空间不够用时,扫描栈区(既变量名区域),将存在变量值的变量名做标记
    
    - 3.分代回收
    | 分代回收核心是在历经多次扫描后,都没有被回收的变量,gc机制认为该变量是常用变量,gc会降低扫描频率
    | 分代指的就是根据存活时间来为变量划分不同等级
    | 新定义的变量放到新生代这个等级中,权重达到设定值转入青春代,权重达到设定值转入老年代
    

     

    面试题

    1. def func(a,b=[]):pass 有什么坑?

    def func(a,b=[]):
        b.append(a)
        return b
    
    v1 = func(1)
    v2 = func(2,[])
    v3 = func(3)
    
    print(v1,v2,v3)  # [1,3] [2] [1,3]
    
    - 如果在函数的默认参数中设置可变参数,在函数的内部会维护一个列表,供所有调用者使用。
    
    - 1.先解释了函数,在函数内部维护了一个 b=[]
    - 2.这个时候v1里边只有一个1
    - 3.随后v2里放入了一个新列表,v2里边只有1个2
    - 4.v3指向的也是b=[],所以现在列表里是[1,3]
    

    2.写带参数的装饰器

    
    
  • 相关阅读:
    Asp.net开发必备51种代码
    防止页面被多次提交
    c#发送邮件.net1.1和.net2.0中的两个方法
    鼠标移至小图,自动显示相应大图
    NET(C#)连接各类数据库集锦
    在C#中对XML的操作
    Window.ShowModalDialog使用总结
    SQLServer2005 添加用户,及操作权限
    定时器
    Global.asax.cs中的方法的含义
  • 原文地址:https://www.cnblogs.com/FGdeHB/p/15827844.html
Copyright © 2020-2023  润新知