• 《人生苦短,我学Python》——列表(List)


    昨天,我们学习了一种数据结构——元组。今天我们将学习另一种数据结构——列表

    列表又叫List,与元组的结构类似,也可以用于存储多个类型的数据。接下来,我们一起学习列表的用法–>


    在这里插入图片描述



    一、要点先知:

    我们通过下面这段代码来理解列表的相关知识:

    # 定义一个列表:
    friendName = ["Kevin", "Tony", "Asum"]
    
    # 输出整个列表:
    print(friendName)
    
    # 访问列表的第一个元素:
    print(friendName[0])
    
    # 修改列表的第一个元素:
    friendName[0] = "Jessica"
    
    # 切片访问列表元素:(下标从0开始)
    # 1.切片访问整个列表,冒号两边没有数字
    print(friendName[:])
    
    # 2.切片访问从第二个元素开始的所有后续元素
    print(friendName[1:])
    
    # 3.切片访问第一个到第三个元素(但不包括第三个),即访问第一个和第二个元素
    print(friendName[:2])
    
    # 4.切片访问第2个元素
    print(friendName[1:2])
    
    # 5.列表逆序输出:
    print(friendName[::-1])
    
    # 向列表中追加元素:
    friendName.append(2021)
    #print(friendName)
    
    # 向列表中追加列表:
    friendName.append(["May", "Anna"])
    #print(friendName)
    
    # 使用insert()往列表第一项添加元素"Tony":
    friendName.insert(0,"Tony")
    
    # 使用pop()1删除列表中的元素:
    # 没有参数时默认删除列表末尾
    friendName.pop()
    
    # 删除列表第二个元素(下标从0开始)
    friendName.pop(1)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • friendName:变量名,用来存储这个列表。

    • []:一对中括号,是定义列表的固定格式。

    • ,:逗号,列表内部数据之间使用逗号分隔开。

    • 空格:两个空格,这里的空格不是必须的。但为了代码美观,建议在逗号后面加一个空格。

    • 字符串:三个字符串,是friendName这个列表里面包含的具体数据。

    ✨如果你已经有了一定的编程基础(比如C,C++,Java等等),相信本文后面的内容将对你作用不大,可以自行跳过,后面的内容主要争对于将python作为第一门编程语言的同学。


    二、基础讲解:

    1. 存储对象——装什么?

    我们知道元组中可以存储多种类型的数据。

    列表与元组一样,列表中的数据元素也可以是任何一种类型,如下所示,整型、浮点型、布尔数等。除此之外,也可以是整型,浮点型,字符串或布尔数的任意组合。

    #  元素全是整数的列表
    integer=[1,2,3,5,7]
    #  元素全是浮点数的列表
    floatNumber=[1.5,1.6,1.7,1.8]
    #  元素全是字符串的列表
    string=['aa','b','c','d']
    #  元素全是布尔值的列表
    boolList=[True,False,True,False]
    # 元素全是列表的列表
    listList=[[1,2,3],[4,5,6],[7,8,9]]
    #  元素全是元组的列表
    tupleList=[(1,2,3),(4,5,6),(7,8,9)]
    #  元素全是字典的列表
    dictList=[{'name':'Tom','age':18},{'name':'Jerry','age':20}]
    #  元素全是集合的列表
    setList=[{1,2,3},{4,5,6},{7,8,9}]
    #  元素全是range的列表
    rangeList=[range(1,10),range(10,20),range(20,30)]
    #  元素全是None的列表
    noneList=[None,None,None,None]
    #  元素是混合类型的列表
    mixList=[1,1.5,'aa',False,[1,2,3],(7,8,9),{'name':'Jerry','age':20},{1,2,3},range(1,10),None]
    
    print(integer)
    print(floatNumber)
    print(string)
    print(boolList)
    print(listList)
    print(tupleList)
    print(dictList)
    print(setList)
    print(rangeList)
    print(noneList)
    print(mixList)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    2. 访问方法——如何访?

    (1)取单个元素——索引:

    前面我们学过,使用索引能够获取元组中的元素,而列表与元组类似,也可以使用索引。

    #  元素全是整数的列表
    integer=[1,2,3,5,7]
    #  取出第一个元素
    first=integer[0]
    #  取出最后一个元素
    last=integer[-1]
    # 打印元素
    print(first,last)
    # 修改最后一个元素
    integer[-1] = 9
    # 打印列表
    print(integer)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    如上,我们成功地对integer数组进行了取单个元素的操作。

    ⚠️列表在索引时最容易出现以下 bug:

    索引错误

    列表中有6个元素,从0开始索引,最大的索引为5或-1

    • 当索引的值超过5以后,就会出现越界并提示:列表索引超出范围(IndexError: list index out of range)

    我们知道索引用于取单个元素,如果要提取列表中的多个连续的元素,该怎么操作呢?

    接下来,我们先学习切片的概念。


    (2)取连续多个元素——切片:

    定义:编程中的切片能对元组、列表等有序数据结构进行处理,以截取数据中连续的片段,方便使用。

    隐喻:就像从长条面包里面切出某一段面包一样,从一段线性排列的数据中选取某一段数据。
    在这里插入图片描述

    这段代码做的事情是定义了一个叫做"integer"的列表,并对其进行了切片操作:

    #  元素全是整数的列表
    integer=[1,2,3,5,7]
    #  切出第一个和第二个元素
    print(integer[0:2])
    
    • 1
    • 2
    • 3
    • 4

    [:] 括号中既有数字也有冒号,表明要对列表进行切片;冒号用于分隔切片开始的位置和切片终止的位置。

    切片要遵循“左闭右开”原则,就是取左边的数据,不取右边的数据,与数学中的区间类似[0, 2),取左不取右,所以输出[1,2]

    ⚠️注意:切片与索引类似,也是从0开始,即第一个元素的索引为0。


    Python中的切片操作非常灵活,可以通过指定不同的参数来实现不同的切片方式。下面是一些常见的切片操作示例:

    常规切片法:

    (1.list[start:end]:从索引start开始,到索引end-1结束,以步长为1切片。共有3种情况:

    1️⃣开始位置数字不填,默认从第一个元素开始切片。根据“左闭右开”原则,如图,从第一个元素(含)开始,取到第三个元素(含)。
    在这里插入图片描述

    2️⃣结束位置数字不填,默认从开始位置切片,取到最后一个元素。

    注意:不填写结束位置的数字时,列表中最后一个元素也会被提取。如图,表示从第二个元素(含)开始,到最后一个元素(含)结束。
    在这里插入图片描述
    3️⃣开始位置和结束位置都不填写时,就是取列表中的所有元素。如图,[:]直接取出所有元素,但这种用法不常见,了解即可。
    在这里插入图片描述


    步长切片法:

    (2.list[start:end:step]:从索引start开始,到索引end-1结束,以步长为step切片。

     integer=[1,2,3,5,7]
    #步长为2进行切片
    print(integer[0::2])
    
    • 1
    • 2
    • 3

    列表逆序切片法:

    (3.list[::-1]:以步长为-1切片,实现列表的逆序。

    integer=[1,2,3,5,7]
    #  步长为-1进行逆序
    print(integer[::-1])
    
    • 1
    • 2
    • 3

    学习了列表的切片方法后,元组也可以使用切片来截取一段数据,如下所示。

    integer=(1,2,3,5,7)
    #  步长为2进行切片
    print(integer[::2])
    # [0,2)切片
    print(integer[:2])
    # [1,4)切片
    print(integer[1:4])
    # 逆序
    print(integer[::-1])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3. 修改错误——如何改?

    学习了索引和切片访问列表中数据的方式后,如果,某个列表中的数据定义错误了,想要进行修改,该怎样操作呢?

    可以直接对相应的元素进行值覆盖!

    friendName = ["Kevin", "Tony", "Asum"]
    print(friendName)
    print(friendName[0])
    # 修改,值覆盖
    friendName[0] = "Jessica"
    print(friendName)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ⚠️列表和元组的异同:

    相同点

    1. 可以使用索引定位到某个元素;
    2. 可以使用切片取一个片段;
    3. 可以存储不同的数据,如,字符串、整型、浮点型、布尔数等。

    不同点:元组的内容定义完成后,里面的内容就不能再修改了!(元组具有不可变的特性)

    由于,元组是不可修改的,强行修改会出现以下 bug:
    类型错误:
    当对元组进行修改时,就会提示元组类型数据更改(TypeError: ‘tuple’ object does not support item assignment)。


    4. 追加元素——append():

    想象一下在食堂排队打饭,你会自动排在队伍的最后方。

    此时排的队列就像是一个列表,自动排在最后方的行为,可以类比为一次对这个列表的“追加”。
    在这里插入图片描述
    定义:追加一般用于描述在列表的末尾添加元素的行为。

    当我们想在列表的尾部追加一个元素的时候,可以在列表名后使用 append() 语句。

    
    integer=(1,2,3,5,7)
    #  在列表中添加元素9
    integer.append(9)
    #  继续在列表中添加元素11
    integer.append(11)
    
    print(integer)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    句点:一个句点,表明将会使用列表的某个内置功能。

    • 这是一个固定的搭配格式,只能使用英文句号,不能替换成其他符号。

    append:类似print,表明我们要在这个列表的尾部添加新的元素。

    ( ):一对英文括号,这是 append 功能的固定格式。括号内是具体要添加到列表末尾的元素。

    • 使用 append() 可以追加不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。

    5. 插入元素——insert():

    在 Python 中,可以使用 insert() 语句来执行插入元素的操作。

    integer=[1,2,3,5,7]
    #  在列表中添加元素9
    integer.insert(1,9)
    #  继续在列表中添加元素11
    integer.insert(3,11)
    
    print(integer)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    句点:句点,表明将会使用列表的某个内置功能。

    insert:类似print。表明我们要在这个列表的某个位置插入新的元素。

    ( ):一对括号,这是insert功能的固定格式。括号内是插入的元素位置以及要插入的元素。

    索引:第一个数字位置表示索引,也就是这个元素要插入到列表中的位置。索引是从 0 开始。

    逗号:一个逗号,用来分隔插入的位置以及插入的具体数据。

    插入元素:插入的元素可以是不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。

    • 插入元素以后,排在此元素之后的原有元素自动后移一位。

    列表插入元素的场景在生活中很常见,例如游戏排行榜。

    游戏玩家得分如果能上榜排行,系统就会把玩家的分数插入排行榜中。

    插入玩家名称和分数后,排在之后的玩家自动后移一位。


    6. 删除元素——pop():

    如果列表中存在我们不需要的元素,想要删除它,这该怎么操作呢?

    这时,我们可以使用 pop(),删除列表中的元素。

    integer=[1,2,3,5,7]
    #  删除列表最后一个元素
    integer.pop()
    #  删除列表中的第一个元素
    num=integer.pop(0)
    
    print(integer)
    print(num)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    pop(),作用是删除列表中指定索引处的元素。

    括号内的数字表示要删除数据的索引,不填写数字则表示默认删除列表中的最后一个数据。

    pop() 在删除列表指定的元素后,可以赋值给变量存储下来。


    三、列表的另类定义:

    我们前面的例子在定义一个列表时,都是使用的常量来作为列表中的元素。

    变量也同样可以作为定义列表的元素,并且列表的各种操作也同样适用于变量数据。

    first=1
    second=2
    third=3
    integer=[first,second,third]
    #  删除列表最后一个元素
    integer.pop()
    #  删除列表中的第一个元素
    num=integer.pop(0)
    
    print(integer)
    print(num)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    上述代码中展示了变量作为列表元素时,代码的使用方式。


    好了,列表的内容就到这里了,我们下期再见!
    在这里插入图片描述

  • 相关阅读:
    【Python 千题 —— 基础篇】分句成词
    P3378 【模板】堆
    SpringMVC知识点总结-DX的笔记
    ChatGPT 从零完全上手实操指南!
    [附源码]计算机毕业设计springboot物业管理系统
    [Python进阶] 可视化打包程序:auto-py-to-exe
    设计模式-责任链-笔记
    Vector-valued function
    Nacos源码安装
    常用设计模式-详解
  • 原文地址:https://blog.csdn.net/weixin_73453526/article/details/132748179