zoukankan      html  css  js  c++  java
  • python学习笔记17:列表list

    1. 常用操作

    注: 可以通过help(list)获取list的完整知识;

    常用方法

    函数名 用法 说明
    append lst.append(item) 列表末尾添加一个元素
    extend lst.extend(lst_new) 列表末尾添加lst_new的元素
    insert lst.insert(i, item) 在位置i添加元素item
    pop lst.pop(i) 删除并返回位置i的元素, i默认为最后一项,也可以使用del lst[i]
    sort lst.sort() 对lst进行排序, 会更改lst, 不返回lst
    reverse lst.reverse() lst逆序, 会更改lst, 不返回lst
    index lst.index(item) 返回lst中第一次出现item的idx
    count lst.count(item) 返回lst中value==item的个数
    remove lst.remove(item) 删除lst中第一个value==item的元素, 不返回值
    len len(lst) 返回元素个数/lst的长度

    具体使用示例

    列表清空/列表赋值

    >>> abc = [] #清空列表(把空列表赋值给变量):  
    >>> shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’] # 赋值多个元素  
    

    列表遍历

    >>> for ele in shoplist:  
    ...     print(ele)  
    
    >>> for i, ele in enumerate(shoplist): 遍历时同时给元素编号/获取索引值
    ...     print(f'{i} {ele}')
    

    列表长度(元素个数)

    >>> len(shoplist)  
    4  
    

    列表追加列表/列表合并/列表排序

    >>> L1.extend(L2) # 在列表L1结尾追加列表L2中的元素;  
    >>> L3 = L1 + L2  # 列表合并;  
    >>> L1.sort()     # 列表排序,注意,列表本身会改变,而不是返回一个被改变的列表,因为列表是可变的。该语句返回None;sort()详细使用见第15.9节;  
    

    获取指定idx对应的元素/获取指定元素对应的idx

    >>> shoplist[0] #根据下标获取列表元素, 返回元素:  
    ‘apple’  
    >>> 
    >>> #取元素对应的index:  
    >>> shoplist.index(‘apple’) #根据列表元素获取下标, 返回下标, 如果元素不存在, 则raise ValueError
    0  
    

    列表追加元素

    >>> shoplist.append(‘rice’) # 给列表追加元素,返回None  
    >>> shoplist  
    [‘apple’, ‘mango’, ‘carrot’, ‘banana’, ‘rice’]  
    

    指定idx添加元素

    >>> shoplist.insert(2, ‘cup’) # 指定index添加元素,返回None  
    >>> shoplist # cup成为idx=2的元素,原本idx>=2的元素的idx都增加1  
    [‘apple’, ‘mango’, ‘cup’, ‘carrot’, ‘banana’, ‘rice’]  
    

    指定idx删除元素

    >>> ele = shoplist.pop(2) # 指定index删除元素,返回元素, 默认删除最后一项;  
    >>> ele  
    ‘cup’  
    >>> shoplist  
    [‘apple’, ‘mango’, ‘carrot’, ‘banana’, ‘rice’]  
    >>>  
    >>> ele = shoplist.pop() #不指定idx,则删除末尾元素  
    >>> ele  
    ‘rice’  
    >>> shoplist  
    [‘apple’, ‘mango’, ‘carrot’, ‘banana’]     
    

    指定value删除元素

    >>> lst = list('hello world')  
    >>> lst  
    ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']  
    >>> lst.remove('o')  # 删除第一个出现的'o'  
    >>> lst  
    ['h', 'e', 'l', 'l', ' ', 'w', 'o', 'r', 'l', 'd']  
    

    计算某元素出现的次数

    >>> shoplist.count(‘carrot’) # 返回int,如果元素不存在,则返回0;  
    1  
    

    遍历list时对循环变量赋值不会改变原本的list.

    >>> a = [0, 1, 2, 3, 4]  
    >>> for e in a:  
    ...     e = 5 # 直接给元素变量赋值不会改变list本身(与Perl有区别)  
    ...  
    >>> print(a) # [0, 1, 2, 3, 4],遍历list元素并对元素赋值不会改变list。  
    
    

    2. 列表生成式

    列表生成式用来简洁在创建一个列表或从一个列表导出另一个列表;

    >>> list(range(1,11))                  # 生成从1到10组成的列表
    >>> [x**2 for x in range(1,11)]        # 生成从1到10的平方组成的列表
    >>> [x**2 for x in range(1,11) if x%2==0] # 生成从1到10的中的偶数的平方组成的列表;  
    >>> [m+n for m in ‘ABC’ for n in ‘XYZ’]# 两层循环,生成ABC与XYZ字符的排列
    >>> [d for d in os.listdir(‘.’)]       # 列表当前目录下的所有文件和文件夹
    >>> [k+‘=’+v for k,v in d.items()]     # for循环使用两个变量,把k和v用等号连接
    >>> [s.lower() for s in L]             # 把list中的字符串改成小写;
    

    3. 生成器

    3.1. 使用类似列表生成式的for循环实现generator

    列表容量有限,一边循环一边计算生成列表,这种方式叫:generator;

    >>> L = [x**2 for x in range(10)] # 列表生成式;打印L可以打印出所有元素;  
    >>> g = (x**2 for x in range(10)) # generator;与列表生成式的区别是小括号;  
    >>> g #打印g会得到,这个地方保存的是算法,而不是实际的列表;  
    <generator object <genexpr> at 0x1022ef630>  
    

    多次使用next(g)可以依次取出值,但比较傻;
    generater是可迭代对象,所以可以使用循环:

    >>> for n in g:
    ...     print(n, end=’ ’)
    ...
    0 1 4 9 16 25 36 49 64 81
    

    打印过一次后,再循环g,就没有内容了;

    3.2. 使用函数实现generator: yield

    如果一个函数定义中包含yield关键字,则函数就不再是一个普通函数,而是一个generator.
    斐波拉契数列:

    >>> def fib(max):  
    ...     a, b = 0, 1  
    ...     for i in range(max):  
    ...         yield b # 每次调用next或每次循环,执行到这就会暂停,返回这个值;  
    ...         a, b = b, a+b  
    ...     return ‘Done’ # generator的return值需要通过捕获StopIteration拿到;  
    ...  
    >>> f = fib(6)  
    >>> f  
    <generator object fib at ox2ac****>  
    >>> for i in f:  
    ...     print(i, end=‘ ’)  
    ...  
    1 1 2 3 5 8  
    

    4. 迭代器

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator;

    生成器都是Iterator对象,但list、dict、str虽然Iterable,但不是Iterator;

    import collections  
    
    isinstance(100, collections.Iterable) # False,整数不是可迭代的  
     
    isinstance([], collections.Iterable)  # True , 列表是可迭代的;  
    isinstance([], collections.Iterator)  # False,列表不是迭代器;  
      
    _gen = (x for x in range(10))  
    isinstance(_gen, collections.Iterable) # True,generator是可迭代的;  
    isinstance(_gen, collections.Iterator) # True,generator是迭代器;  
    

    使用iter()函数,可以把list/dict/str变成Iterator;

    isinstance(iter([]), collections.Iterator) # True  
    
  • 相关阅读:
    tomcat文件夹没有部署项目和Tomcat中webapps中没有运行项目-上传下载文件和图片
    eclipse和myeclipse设置默认编码格式为UTF-8
    mybatis基础学习1---(配置文件和sql语句)
    idea 快捷键以及包含字符串文件搜索
    idea 设置项目编码
    idea 取消代码下波浪线
    idea打开可选项目
    idea打印gc日志
    idea运行scala有问题
    idea简单使用
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/13231704.html
Copyright © 2011-2022 走看看