• Python内置数据结构----list


    概念

    列表(list)是由若干个有序的元素组成的可变的队列。列表中的个体称为元素,由于有序,就可以使用索引。

    列表是可变的

    列表的定义和初始化

    使用list()函数定义列表

    list(iterable)的参数必须是一个可迭代对象

    In [23]: a=list()                                                                                                         
    
    In [24]: a                                                                                                                
    Out[24]: []

    使用可迭代对象定义列表

    In [25]: list(range(5))                                                                                                   
    Out[25]: [0, 1, 2, 3, 4]

    列表不能一开始就限制其大小

    In [26]: list(4)                                                                                                          
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-26-31c61e8f6717> in <module>
    ----> 1 list(4)
    
    TypeError: 'int' object is not iterable
    In [27]: list(1,4)                                                                                                        
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-27-a8056dfeeada> in <module>
    ----> 1 list(1,4)
    
    TypeError: list() takes at most 1 argument (2 given)

    列表的索引访问

    索引(下标)分为两种:

    • 正索引:从左至右,从0开始依次编号列表中的每一个元素。
    • 负索引:从右至左,从-1开始

    正、负索引都不能超界,否则抛异常

    索引的访问方式

    list[index]来访问

    In [29]: a=list(range(5))                                                                                                 
    
    In [30]: a[1]                                                                                                             
    Out[30]: 1
    
    In [31]: a[3]                                                                                                             
    Out[31]: 3
    
    In [32]: a[5]                                                                                                             
    ---------------------------------------------------------------------------
    IndexError                                Traceback (most recent call last)
    <ipython-input-32-4a84d856522b> in <module>
    ----> 1 a[5]
    
    IndexError: list index out of range

    修改索引对应的值

    lst[index]=value

    In [57]: a=[1,2,[4,5]]                                                                                                    
    
    In [58]: a[1]=1                                                                                                           
    
    In [59]: a                                                                                                                
    Out[59]: [1, 1, [4, 5]]
    
    In [60]: a[2][1]=3                                                                                                        
    
    In [61]: a                                                                                                                
    Out[61]: [1, 1, [4, 3]]

    列表中的方法

    append(value)尾部追加元素

    返回值None,说明是就地修改,空间复杂度O(1)

    In [50]: a=list()                                                                                                         
    
    In [51]: a.append(1)                                                                                                      
    
    In [52]: a                                                                                                                
    Out[52]: [1]
    
    In [53]: a.append(list(range(4)))                                                                                         
    
    In [54]: a                                                                                                                
    Out[54]: [1, [0, 1, 2, 3]]

    index(value,[start,[stop]])

    在指定区间内查找是否存在value,如果存在,就返回第一个找到的索引,否则,抛出异常

    In [37]: a=[1,3,2,5,9,3]                                                                                                  
    
    In [38]: a.index(3)                                                                                                       
    Out[38]: 1
    
    In [39]: a.index(3,-1)                                                                                                    
    Out[39]: 5
    
    In [49]: a.index(2,-4,-2)                                                                                                 
    Out[49]: 2

    注意,开始的索引(start)必须要在结束的索引(stop)的左边,否则抛出异常

    In [42]: a.index(3,-2,1)                                                                                                  
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-42-9ee62b49790f> in <module>
    ----> 1 a.index(3,-2,1)

    copy()

    直接赋值

    In [1]: a=[1,2,3,[4,5]]                                                                                                   
    
    In [2]: b=a                                                                                                               
    
    In [3]: b[1]=6                                                                                                            
    
    In [4]: a                                                                                                                 
    Out[4]: [1, 6, 3, [4, 5]]
    
    In [5]: b[3][1]=7                                                                                                         
    
    In [6]: a                                                                                                                 
    Out[6]: [1, 6, 3, [4, 7]]
     

    复制列表,是浅拷贝或者称为影子拷贝(内存地址发生了变化)

    In [9]: b=a.copy()                                                                                                        
    
    In [10]: b                                                                                                                
    Out[10]: [1, 6, 3, [4, 7]]
    
    In [11]: a                                                                                                                
    Out[11]: [1, 6, 3, [4, 7]]
    
    In [12]: a[1]=5                                                                                                           
    
    In [13]: a                                                                                                                
    Out[13]: [1, 5, 3, [4, 7]]
    
    In [14]: b                                                                                                                
    Out[14]: [1, 6, 3, [4, 7]]

    当列表的元素是引用类型的时候,情况有所不同,因为引用类型的内存地址是同一个

    In [15]: b[3][0]=9                                                                                                        
    
    In [16]: b                                                                                                                
    Out[16]: [1, 6, 3, [9, 7]]
    
    In [17]: a                                                                                                                
    Out[17]: [1, 5, 3, [9, 7]]
    In [27]: b=a                                                                                                              
    
    In [28]: id(a)                                                                                                            
    Out[28]: 140466732748424
    
    In [29]: id(b)                                                                                                            
    Out[29]: 140466732748424

    insert(index,obj)

    在指定的索引处插入元素,返回值为None,就地修改,时间负载度O(1)

    In [67]: a                                                                                                                
    Out[67]: [1, 1, [4, 3], [3, 6]]
    
    In [68]: a.insert(3,3)                                                                                                    
    
    In [69]: a                                                                                                                
    Out[69]: [1, 1, [4, 3], 3, [3, 6]]

    insert方法索引超界问题

    正索引超界,相当于尾部追加

    In [70]: a.insert(4,3)                                                                                                    
    
    In [71]: a                                                                                                                
    Out[71]: [1, 1, [4, 3], 3, 3, [3, 6]]
    
    In [72]: a.insert(6,3)                                                                                                    
    
    In [73]: a                                                                                                                
    Out[73]: [1, 1, [4, 3], 3, 3, [3, 6], 3]

    负索引超界相当于头部插入

    In [74]: a.insert(-10,3)                                                                                                  
    
    In [75]: a                                                                                                                
    Out[75]: [3, 1, 1, [4, 3], 3, 3, [3, 6], 3]

    extend(iterable)

    将可迭代对象的元素追加至列表尾部,就地修改

    In [76]: a=[1,2,3]                                                                                                        
    
    In [77]: b=[4,5,6]                                                                                                        
    
    In [78]: a.extend(b)                                                                                                      
    
    In [79]: a                                                                                                                
    Out[79]: [1, 2, 3, 4, 5, 6]

    count(value)统计值出现的次数

    In [81]: a.count(1)                                                                                                       
    Out[81]: 1
    
    In [82]: a.count(3)                                                                                                       
    Out[82]: 0

    remove(value)删除列表中的元素

    从左至右,查看列表中第一个匹配的值,并移除,就地修改

    In [83]: a                                                                                                                
    Out[83]: [12, 5, 5, 6, 1]
    
    In [84]: a.remove(5)                                                                                                      
    
    In [85]: a                                                                                                                
    Out[85]: [12, 5, 6, 1]
    
    In [86]: a.remove(3)                                                                                                      
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-86-fe741f3ae678> in <module>
    ----> 1 a.remove(3)
    
    ValueError: list.remove(x): x not in list

    pop([index])

    从列表弹出索引对应的元素,如果不指定索引,默认弹出尾部的值。如果索引超界,会跑出异常

    In [87]: a                                                                                                                
    Out[87]: [12, 5, 6, 1]
    
    In [88]: a.pop(3)                                                                                                         
    Out[88]: 1
    
    In [89]: a                                                                                                                
    Out[89]: [12, 5, 6]
    
    In [90]: a.pop()                                                                                                          
    Out[90]: 6
    
    In [91]: a                                                                                                                
    Out[91]: [12, 5]
    
    In [92]: a.pop(2)                                                                                                         
    ---------------------------------------------------------------------------
    IndexError                                Traceback (most recent call last)
    <ipython-input-92-d5503bd15afa> in <module>
    ----> 1 a.pop(2)
    
    IndexError: pop index out of range

    注意:pop是唯一一个即修改列表又返回非None值得方法

    reverse()

    将列表元素反转,就地修改

    In [93]: a=[12,5,5,6,1]                                                                                                   
    
    In [94]: a.reverse()                                                                                                      
    
    In [95]: a                                                                                                                
    Out[95]: [1, 6, 5, 5, 12]

    sort(key=None, reverse=False)

    对列表元素进行排序,就地修改,默认升序。

    In [97]: lst=[5,3,'def',9,16,13,'a','abc']                                                                                
    
    In [98]: lst.sort(key=str,reverse=False)                                                                                  
    
    In [99]: lst                                                                                                              
    Out[99]: [13, 16, 3, 5, 9, 'a', 'abc', 'def']
    
    In [100]: lst.sort(key=int,reverse=True)                                                                                  
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-100-1c8180a157db> in <module>
    ----> 1 lst.sort(key=int,reverse=True)
    
    ValueError: invalid literal for int() with base 10: 'a'

    对于sort方法,千万不要用下面的形

    In [32]: a=[10,1,3,2,6]                                                                                                   
    
    In [33]: c=a.sort()                                                                                                       
    
    In [34]: c                                                                                                                
    
    In [35]: a                                                                                                                
    Out[35]: [1, 2, 3, 6, 10]

    可以使用内置函数sorted替代

    clear()

    清空列表所有元素,只剩一个空列表

    In [101]: a                                                                                                               
    Out[101]: [1, 6, 5, 5, 12]
    
    In [102]: a.clear()                                                                                                       
    
    In [103]: a                                                                                                               
    Out[103]: []

    列表的其他操作

    len()计算列表长度

    In [104]: lst                                                                                                             
    Out[104]: [13, 16, 3, 5, 9, 'a', 'abc', 'def']
    
    In [105]: len(lst)                                                                                                        
    Out[105]: 8
    
    In [106]: for i in range(len(lst)): 
         ...:     print(lst[i]) 
         ...:                                                                                                                 
    13
    16
    3
    5
    9
    a
    abc
    def

    +、* 操作(返回新列表)

    In [107]: lst1=[3,2]                                                                                                      
    
    In [108]: lst2=[4,2]                                                                                                      
    
    In [109]: lst1+lst2                                                                                                       
    Out[109]: [3, 2, 4, 2]
    
    
    In [112]: lst1 * 3                                                                                                        
    Out[112]: [3, 2, 3, 2, 3, 2]

     构建列表的重要方法

    因为列表不能一开始就限制其大小,如 list(4) 这样是不可以的。所以有些时候如果确定有n个元素要用,可以先开辟出n个元素的空间,如:[0] * n。不要写[None] * n,因为None无法参与运算。

  • 相关阅读:
    python_day11 mysql
    python_day10 多线程 协程 IO模型
    python_day09 多进程 多线程 协程 paramiko模块
    python_day08 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程
    python_day07 常用模块xml/configparser/hashlib/subprocess 面向对象程序设计
    python_day06 匿名函数与内置函数 常用模块
    python_day05 协程函数 面向过程编程 递归和二分法 模块和包的使用 常用模块 开发代码规范
    python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式
    python_day03 文件处理复习和函数定义调用参数对象
    python_day02 基本数据类型操作,字符编码,文件处理
  • 原文地址:https://www.cnblogs.com/zh-dream/p/13342229.html
Copyright © 2020-2023  润新知