• Python标准库中的列表(list、数组)操作汇总(大约25种操作),附示例代码


    Python标准库中的列表(list)类似于C/C++中的数组

    Python扩展库中的ndarray对象有许多操作和列表(list)的操作类似,比如切片操作、元素访问呢,但它们是两个东西,大家不要搞混了。关于ndarray对象的基本操作,可参考博文 https://blog.csdn.net/wenhao_ir/article/details/124416798

    数组对于编程而言其重要性是不言而喻的,所以这篇博文汇总一下Python标准库中的列表(list)的操作。

    声明:博主(昊虹图像算法)写这篇博文时,用的Python的版本号为3.9.10。

    01-序列和列表的基本概念

    序列是 Python 中最基本的数据结构
    序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。
    序列都可以进行的操作包括索引,切片,加,乘,检查成员。
    此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。

    Python 有 6 个序列的内置类型,但最常见的是列表和元组。
    列表是最常用的 Python 数据类型,列表的数据项不需要具有相同的类型。

    02-列表的创建

    02-1-直接用中括号[]创建

    创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

    list1 = ['Google', 'CSDN', 1997, 1999]
    list2 = [1, 2, 3, 4, 5]
    list3 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
    
    • 1
    • 2
    • 3

    运行结果如下图所示:
    在这里插入图片描述
    从上面的结果中我们可以看出,在Python中是用单词list表示列表的。

    02-2-用构造函数创建

    列表本质上还是对象,所以可以用构造函数创建,代码如下:

    list1 = list()
    
    list1.append('Google')
    list1.append('CSDN')
    list1.append('1997')
    list1.append('1999')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果如下:
    在这里插入图片描述
    从上面来看,显然第1种方法比第2种方法方便。但是当您要使用成员函数append()追加元素时,如果用第一种方法,Pycharm会不建议这么操作,如下图所示:
    在这里插入图片描述

    This list creation could be rewritten as a list literal。
    
    • 1

    这句话的意思是列表应该按本义创建。什么叫本义创建?列表本质上是个对象,既然对象,那就用构造函数初始化创建呗。
    下面的两篇文章都说了这个问题的原因:
    https://www.cnblogs.com/jiangxiaobo/p/11622730.html
    https://zhuanlan.zhihu.com/p/222401764

    03-列表元素的访问

    示例代码如下:

    list1 = ['Google', 'CSDN', 1997, 1999]
    
    print(list1[0])
    print(list1[1])
    print(list1[2])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果如下:
    在这里插入图片描述
    除了从左往右,也可从右往左,示例代码如下:

    list1 = ['Google', 'CSDN', 1997, 1999]
    
    print(list1[-1])
    print(list1[-2])
    print(list1[-3])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果如下:
    在这里插入图片描述

    04-列表的切片操作

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    list2 = list1[0:4]
    
    • 1
    • 2

    注意:切片的区间是左闭右开的,即[0:4]相当于[0,4)
    运行结果如下:
    在这里插入图片描述
    还可以正索引和负索引相结合:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    list2 = list1[0:-2]
    
    • 1
    • 2

    上面的list1[0:-2]表示截取0到倒数第2个的片段,运行结果如下:
    在这里插入图片描述

    05-1 使用方法append()添加列表元素

    首先说一下,使用方法append()添加列表元素时有可能Pycharm会有下面的建议提示:
    在这里插入图片描述

    This list creation could be rewritten as a list literal。
    
    • 1

    要消除上面的提示,可以参考我的另一篇博文,链接如下:
    https://blog.csdn.net/wenhao_ir/article/details/125414855

    使用方法append()添加列表元素的示例代码如下:

    list1 = list()
    
    list1.append('Google')
    list1.append('CSDN')
    list1.append('1997')
    list1.append('1999')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果如下:
    在这里插入图片描述
    要特别注意的是:当使用方法append()添加的元素本身也是一个列表时,此时是浅拷贝操作,也就是说被拷贝的列表值改变,那么列表中相应元素的值也会变,示例代码如下:

    list1 = list()
    
    list1.append('Google')
    list1.append('CSDN')
    list1.append('1997')
    list1.append('1999')
    
    list2 = [2010]
    list1.append(list2)
    list2[0] = 4444
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果如下:
    在这里插入图片描述
    如果是深拷贝,那么list1中的第4个元素值应该是[2010]才对。

    如果想实现列表的深拷贝,可以像下面这样操作:

    import copy
    
    list1 = list()
    
    list1.append('Google')
    list1.append('CSDN')
    list1.append('1997')
    list1.append('1999')
    
    list2 = [2010]
    list1.append(copy.deepcopy(list2))
    list2[0] = 4444
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    运行结果如下:
    在这里插入图片描述
    当然也可以用方法copy()实现,即代码:

    list1.append(copy.deepcopy(list2))
    
    • 1

    可以换成

    list1.append(list2.copy())
    
    • 1

    对于一般的变量,效果就是深拷贝,代码如下:

    list1 = list()
    
    list1.append('Google')
    list1.append('CSDN')
    list1.append('1997')
    list1.append('1999')
    
    value1 = 2030
    list1.append(value1)
    value1 = 4444
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果如下:
    在这里插入图片描述

    05-2 使用方法extend()在列表末尾一次性追加另一个序列中的多个值

    从上面的示例我们可以看出,方法append()是把被追加的列表作一个整体(即作为一个元素)添加到原列表中的,有时候我们希望在列表末尾一次性追加另一个序列中的多个值,这个时候就可以用方法extend()实现。
    示例代码如下:

    list1 = ['Google', 'CSDN', 'Taobao']
    list2 = [1997, 1999, 1998]
    list1.extend(list2)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    05-3 使用方法insert()在列表的任意位置插入元素

    示例代码如下:

    list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
    list1.insert(3, 'Tecent')
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    06-1-使用del语句删除列表中指定位置的元素

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    del list1[2]
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述
    从上面的结果来看,第2个元素’tencent’被删除了。

    06-2-使用方法pop()删除指定位置的元素,并返回元素值

    方法pop()语法如下:

    list.pop([index=-1])
    
    • 1

    index – 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    list2 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    
    value1 = list1.pop()
    value2 = list1.pop(1)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果如下:
    在这里插入图片描述

    06-3-使用方法remove()移除列表内指定内容的元素

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998, 'CSDN']
    list1.remove('CSDN')
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述
    从上面的运行结果可知,方法remove()移除的是第一个匹配到的元素。上面的字符串元素’CSDN’有两个,但只被删了第一个。

    07-1 使用函数len()测量(返回)列表的长度

    示例代码如下:

    len1 = len([1, 2, 3])
    
    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    len2 = len(list1)
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述

    07-2 使用函数max()返回列表中元素的最大值

    示例代码如下:

    list1 = [456, 700, 200]
    max1 = max(list1)
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    07-3 使用函数min()返回列表中元素的最大值

    示例代码如下:

    list1 = [456, 700, 200]
    min1 = min(list1)
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    08-使用运算符"+"实现列表合并

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    list2 = [4, 5, 6]
    list3 = list1+list2
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    09-使用运算符"*"实现列表重复扩展

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    list2 = [4, 5, 6]
    list3 = list1*2
    list4 = list2*3
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述

    10-使用“in”判断某元素是否在列表里

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    
    bool1 = 'CSDN' in list1
    bool2 = 'zhihu' in list1
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述

    11-列表嵌套(类似于多维数组-列表作为列表的元素)

    列表嵌套,本质上指列表也可以作为列表的元素。

    示例代码如下:

    list1 = [['Google', 'CSDN', 'tencent'], [1997, 1999, 1998]]
    
    a1 = list1[0][1]
    b1 = list1[1][2]
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述
    注意,对于语句:

    a1 = list1[0][1]
    b1 = list1[1][2]
    
    • 1
    • 2

    不能像ndarray对象那样写成下面这样:

    a1 = list1[0, 1]
    b1 = list1[1, 2]
    
    • 1
    • 2

    此时会报错:
    在这里插入图片描述
    ndarray的多维矩阵元素访问详情见下面这篇博文:
    https://blog.csdn.net/wenhao_ir/article/details/124419922

    12-使用operator的方法eq()比较两个列表是否相等

    示例代码如下:

    import operator
    
    a = [1, 2]
    b = [2, 3]
    c = [2, 3]
    
    bool1 = operator.eq(a, b)
    bool2 = operator.eq(c, b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果如下:
    在这里插入图片描述

    13-使用方法count()统计某个元素在列表中出现的次数

    示例代码如下:

    list1 = [123, 'Google', 'CSDN', 'Taobao', 123]
    count1 = list1.count(123)
    count2 = list1.count('CSDN')
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    14-使用方法index()查找列表元素

    方法index()语法如下:

    list.index(x[, start[, end]])
    
    • 1

    x-- 查找的对象。
    start-- 可选,查找的起始位置。
    end-- 可选,查找的结束位置。
    示例代码如下:

    list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
    index1 = list1.index('CSDN')
    index2 = list1.index(1999)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    列表中1999有两个,可见其返回的是第一个的索引。

    15-使用方法reverse()反向列表中的元素

    示例代码如下:

    list1 = [1, 2, 3, 4, 5, 6, 7]
    list1.reverse()
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    16-使用方法sort()对列表进行排序操作

    方法sort()的语法如下:

    list.sort( key=None, reverse=False)
    
    • 1

    key – 用来进行比较的数值,可选参数。
    reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
    示例代码如下:

    list1 = [1, 5, 3, 9, 7, 4, 2, 8, 6]
    list1.sort()
    
    list2 = [1, 5, 3, 9, 7, 4, 2, 8, 6]
    list2.sort(reverse=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果如下:
    在这里插入图片描述
    关于方法sort()的第一个参数key的用法,就说来话长了,具体情况大家可以参见我的另一篇博文:
    https://blog.csdn.net/wenhao_ir/article/details/125406092

    17-使用方法clear()清空列表

    示例代码如下:

    list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
    list1.clear()
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    18-1-使用方法copy()或方法copy.append()复制列表【深拷贝操作】

    方法copy()的使用示例如下:

    list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
    list2 = list1.copy()
    list1[0] = 'Facebook'
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    从上面的代码和运行结果我们可以看出,方法copy()作的是深拷贝。

    方法copy.append()的使用示例如下:

    import copy
    
    list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
    list2 = copy.deepcopy(list1)
    list1[0] = 'Facebook'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果如下:
    在这里插入图片描述
    从上面的代码和运行结果我们可以看出,方法copy.append()也是作的是深拷贝。

    18-2-使用“=”实现列表的浅拷贝【浅拷贝操作】

    示例代码如下:

    list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
    list2 = list1
    list1[0] = 'Facebook'
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    从上面的运行结果可以看出,对list1的修改影响到了list2,说明二者是共用内存空间,说是“=”实现的是浅拷贝。

    19-使用函数tuple()将列表转换为元组

    示例代码如下:

    list1 = ['Google', 'Taobao', 'CSDN', 'Baidu']
    tuple1 = tuple(list1)
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述
    关于元组的详细操作,大家可以参看我的另一篇博文,链接如下:
    https://blog.csdn.net/wenhao_ir/article/details/125407815

    20-列表转换为ndarray对象

    关于列表如何转换为ndarray对象,请大家参考我的另一篇博文,链接如下:
    https://blog.csdn.net/wenhao_ir/article/details/125413801

    参考资料:
    https://blog.csdn.net/wenhao_ir/article/details/125100220

  • 相关阅读:
    安装docker
    【JavaScript内置对象】Date对象,从零开始
    前端技术koa/egg和es6入门
    免费百度快速收录软件
    python自动化测试之Appium自动化测试环境搭建
    备战蓝桥杯Day22 - 计数排序
    笔记-fabric.js的使用-参考官网
    代码随想录 | Day 57 - LeetCode 647. 回文子串、516. 最长回文子序列
    简单但好用:4种Selenium截图方法了解一下!
    The Kalman Filter
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/125400072