当前位置: 首页 > news >正文

四、Python —— 列表

文章目录

  • 一、列表的初始化
    • 1.1、直接初始化
    • 1.2、通过 append 函数初始化
    • 1.3、 通过 for 语句初始化列表长度和每个位置的数值
  • 二、访问列表元素
    • 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 往前数

 但是 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] = 1for 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 = ab[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))  # 输出3a.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] 可以返回一个 逆序的 新列表
http://www.lryc.cn/news/492167.html

相关文章:

  • Paper -- 建筑高度估计 -- 基于街景图像和深度学习的城区建筑高度计算
  • 机器学习周志华学习笔记-第6章<支持向量机>
  • 第三届航空航天与控制工程国际 (ICoACE 2024)
  • 【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)
  • BERT 详解
  • 使用 MySQL 的 REPLACE() 函数轻松替换表中字段
  • Http 响应协议
  • TCP/IP 协议:网络世界的基石(2/10)
  • Lua--1.基础知识
  • 【GPT】力量训练的底层原理?
  • 各种排序算法
  • 源码解读笔记:协程的 ViewModel.viewModelScope和LifecycleOwner.lifecycleScope
  • 11.27周三F34-Day8打卡
  • XG(S)-PON原理
  • C语言实例之9斐波那契数列实现
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】
  • 数据结构--Map和Set
  • 计算机操作系统——进程控制(Linux)
  • 【前端】ES6基础
  • 【排序算法 python实现】
  • Java图书管理系统(简易保姆级)
  • 嵌入式硬件设计:从概念到实现的全流程
  • 第 4 章 Java 并发包中原子操作类原理剖析
  • 从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中
  • 政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例
  • CentOS 7 安装部署 KVM
  • ArcGIS 10.2软件安装包下载及安装教程!
  • 一个专为云原生环境设计的高性能分布式文件系统
  • 基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码
  • 3174、清除数字