文章目录

  • 一、列表的初始化
  • 1.1、直接初始化
  • 1.2、通过 append 函数初始化
  • 1.3、 通过 for 语句初始化列表长度和每个位置的数值
  • 二、访问列表元素
  • 2.1、列表下标可以为负数
  • 2.1、越界的含义
  • 三、 使用循环语句遍历列表
  • 3.1、通过下标遍历
  • 3.2、通过 for…in… 直接遍历
  • 四、列表的切片操作
  • 五、列表的复制
  • 六、列表的运算
  • 七、列表的常用操作
  • 八、嵌套列表 (多维列表)
  • 8.1、二维列表的表示
  • 8.1、二维列表的输出 (遍历)
  • 8.2、二维列表的初始化
  • 九、补充

  • 列表实际上就是 C++ 中的数组


    一、列表的初始化

     列表是一种常见的变量类型,可以存储一列元素。元素的类型可以不同,不过大多数情况下类型是相同的。
     列表需要用 方括号括 起来,中间的元素用 逗号隔开,最后一个元素后可以多加一个逗号。

    1.1、直接初始化

    a = []  # 定义一个空列表
    b = [1, 2]  # 含有2个整数的列表
    c = [6, "python", 3.14]  # 含有3个不同类型元素的列表
    
    print(a, b, c)
    """output
    [] [1, 2] [6, 'python', 3.14]
    
    """
    

    1.2、通过 append 函数初始化

    append() 函数的作用是,在列表末尾添加一个元素

    a = []
    for i in range(5):  # 初始化[0, 0, 0, 0, 0]
        a.append(0)
    print(a)
    
    n = 4
    b = []
    for i in range(n):  # 初始化[0, 1, 4, 9]
        b.append(i * i)
    print(b)
    

    1.3、 通过 for 语句初始化列表长度和每个位置的数值

    a = [0 for i in range(5)]  # 初始化[0, 0, 0, 0, 0]
    print(a)
    
    n = 4
    b = [i * i for i in range(n)]  # 初始化[0, 1, 4, 9]
    print(b)
    

    二、访问列表元素

    2.1、列表下标可以为负数

     可以通过下标读/写列表中的元素,下标从 0 开始,也可以是 负数,负数下标表示的是 除以 列表长度的 余数 对应的位置。负数下标相当于将列表首位相接,然后 从 0 往前数

    2.1、越界的含义

     python 中同样有越界的含义,如果列表长度是 n,那么 下标 只能取 -n~n-1之间的值。

    a = [0, 1, 2]
    print(a[0], a[1], a[2])  # 读取列表中每个位置的值
    
    a[0] = 3  # 给列表中的某个位置写值
    print(a)
    
    print(a[-1])  # 由于-1 % 3 = 2,所以表示的是a[2]
    

    三、 使用循环语句遍历列表

    3.1、通过下标遍历

    a = [2, 1, 4, 5, 3]
    
    for i in range(5):
        print(a[i], end=' ')
    

    3.2、通过 for…in… 直接遍历

    a = [2, 1, 4, 5, 3]
    
    for x in a:
        print(x, end=' ')
    

    练习:假设斐波那契数列的前两项分别是 a0=0, a1=1, 求 an

    n = int(input())
    
    a = [0 for i in range(n + 1)]
    a[0] = 1
    a[1] = 1
    
    for i in range(2, n+1):
        a[i] = a[i-2] + a[i-1]
    
    print(a[n])
    

    四、列表的切片操作

     列表的切片操作会返回一个新列表。用法:

  • a[begin:end] 会返回包含 a[begin], a[begin + 1], ..., a[end - 1] 的列表。
  • 省略 begin 时,begin 的默认值为 0
  • 省略 end 时,end 的默认值为 列表长度
  • 如果 beginend负数 时,表示的是 %列表长度
  • 如果 begin > end,表示切片为
  • 注意:切片这里的 begin 和 end 与 上面列表的下表不同,列表的下标是有 越界 这个概念的,但是切片没有 (也就是说 begin 和 end 的取值范围可以无穷大)。

     例如:

    a = [0, 1, 2, 3, 4]
    
    print(a[1:4])  # 输出[1, 2, 3]
    print(a[1:])  # 输出[1, 2, 3, 4]
    print(a[:4])  # 输出[0, 1, 2, 3]
    print(a[:])  # 输出[0, 1, 2, 3, 4]
    print(a[-4:-1])  # 等价于print(a[1:4])
    

     切片也支持 写操作

    a = [0, 1, 2, 3, 4]
    
    a[1:4] = [2, 3]
    print(a)  # 输出[0, 2, 3, 4]
    

    五、列表的复制

     列表跟其他变量类型不同,如果 用等号 复制 列表,那么 原列表和新列表同一个列表对新列表修改会修改原列表的值。例如:

    a = [0, 1, 2, 3, 4]
    b = a
    
    b[0] = 5
    print(a, b)  # 会发现a[0]和b[0]都被修改了
    """output
    [5, 1, 2, 3, 4] [5, 1, 2, 3, 4]
    
    """
    

     但是,切片并不是拷贝,切片可以得到一个 原列表的 浅拷贝。此时再修改新列表,原列表就 不会发生变化 了。例如:

    a = [0, 1, 2, 3, 4]
    b = a[:]
    
    b[0] = 5
    print(a, b)  # 会发现a[0]没有被修改
    """output
    [0, 1, 2, 3, 4] [5, 1, 2, 3, 4]
    
    """
    

    六、列表的运算

    操作 效果
    列表 + 列表 将两个列表拼接起来,得到一个 新列表
    列表 * 整数 将若干个自身拼接起来,得到一个 新列表

    加法和乘法的所生成的新列表 c,并不会改变原来都两个列表 a 和 b

    a = [0, 1, 2]
    b = [3, 4]
    
    c = a + b  # c相当于a和b的浅拷贝
    print(c)  # 输出[0, 1, 2, 3, 4]
    
    d = a * 3  # d相当于a的浅拷贝
    print(d)  # 输出[0, 1, 2, 0, 1, 2, 0, 1, 2]
    
    a += [3]  # 在a的末尾添加一个新元素3
    print(a)  # 输出[0, 1, 2, 3]
    """output
    [0, 1, 2, 3, 4]
    [0, 1, 2, 0, 1, 2, 0, 1, 2]
    [0, 1, 2, 3]
    
    """
    

    七、列表的常用操作

    假设 a 是一个列表,则:

    表示 操作
    len(a) 返回列表长度
    a.append(x) 在列表末尾添加一个新元素
    a.pop() 删除列表的最后一个元素
    a.reverse() 将整个列表翻转
    a.sort() 将整个列表从小到大排序

    例如:

    a = [0, 1, 2]
    
    print(len(a))  # 输出3
    
    a.append(3)
    print(a)  # 输出[0, 1, 2, 3]
    
    a.pop()
    print(a)  # 将[0, 1, 2, 3]的最后一个数删掉,所以输出[0, 1, 2]
    
    a.reverse()
    print(a)  # 输出[2, 1, 0]
    
    a.sort()
    print(a)  # 输出[0, 1, 2]
    

    八、嵌套列表 (多维列表)

    8.1、二维列表的表示

     列表中的元素也可以是列表,例如:

    matrix = [  # 列表中的元素也可以是列表
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8],  # 最后一个元素后可以添加逗号
    ]
    

    8.1、二维列表的输出 (遍历)

     二维列表的输出关键就在于找到 下标元素 的对应关系。下面给出两种输出方式 (遍历方式):

    matrix[1][0] = 99  # 修改嵌套列表中元素的值
    print(matrix[1][0])  # 读取嵌套列表中元素的值
    
    """先输出行再输出列"""
    for i in range(len(matrix)):  # 循环打印整个矩阵
        for j in range(len(matrix[i])):
            print(matrix[i][j], end=' ')
        print()  # 在行末输出回车
    
    for row in matrix:  # 循环打印整个矩阵
        for x in row:
            print(x, end=' ')
        print()  # 在行末输出回车
    
    """先输出列再输出行"""
    for j in range(len(matrix[0])):
        for i in range(len(matrix):
            print(matrix[i][j], end = " ")
        print()
    

    8.2、二维列表的初始化

    方法一:采用 append() 函数初始化:

    matrix = []
    
    for i in range(3):
        row = []
        for j in range(3):
            row.append(i * 3 + j)
        matrix.append(row)
    
    print(matrix)
    

    方法二:采用 for 语句直接初始化:

    matrix = [[i * 3 + j for j in range(3)] for i in range(3)]
    print(matrix)
    """output
    [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
    
    """
    

    九、补充

    1. 当需要读入一行 整数 时,可以用 a = list(map(int, input().split()))。类似地,当需要读入一行 浮点数 时,可以用 a = list(map(float, input().split()))
    2. a[::-1] 可以返回一个 逆序的 新列表

    作者:Miyazaki_Hayao

    物联沃分享整理
    物联沃-IOTWORD物联网 » 四、Python —— 列表

    发表回复