当前位置: 首页 > IT博客 > 编程 > Python

python如何定义二维数组,python二维数组定义

  • Python
  • 2026-01-08

python如何定义二维数组?1. 导入Numpy库使用前需通过import语句导入Numpy,并约定俗成地简写为np:import numpy as np2. 创建一维数组一维数组是元素的线性序列,那么,python如何定义二维数组?一起来了解一下吧。

python二维数组定义

在Python中,定义空数组(或更准确地说,空列表)的方法取决于具体需求。以下是两种常见场景的解决方案:

1. 使用Python内置列表(推荐基础场景)# 定义一维空列表empty_list_1d = []# 定义二维空列表(需初始化嵌套结构)empty_list_2d = [[] for _ in range(3)]# 创建3行空列表的二维结构

关键说明

列表是Python原生数据结构,无需额外依赖

二维列表需通过列表推导式初始化,直接[[]] * 3会导致子列表引用问题

2. 使用NumPy数组(适合数值计算)import numpy as np# 创建未初始化的空数组(内容为内存残留值)empty_np_1d = np.empty(5)# 长度为5的一维数组empty_np_2d = np.empty((3,4))# 3行4列的二维数组# 创建全零数组(更安全的初始化方式)zeros_np_1d = np.zeros(5)

重要区别

np.empty()创建的数组包含内存残留值,需后续赋值才能使用

数值计算建议用np.zeros()或np.ones()进行明确初始化

需要先安装NumPy库(pip install numpy)

典型应用场景建议:

通用数据存储:使用Python列表(支持混合类型数据)

数值计算/矩阵运算:使用NumPy数组(性能更优)

固定维度初始化:NumPy的empty()/zeros()

动态增长结构:Python列表的append()方法

注意:Python中没有严格的"数组"类型,通常用列表(list)实现类似功能,而NumPy提供的ndarray是更专业的数组实现。

python定义一个数组

在Python中创建二维数组,可以通过创建一个列表,其元素同样是列表来实现。使用列表解析是一种简洁且高效的方法。例如,创建一个9*9的二维列表,可以这样写:

2d_list = [[0 for col in range(9)] for row in range(9)]

这个例子中,`cols`和`rows`代表列数和行数,你可以根据需要调整这两个变量的值。例如,如果你需要一个4*4的二维列表,可以这样设置:

2d_list = [[0 for col in range(4)] for row in range(4)]

通过这种方式,你可以轻松地创建任何大小的二维列表。列表解析不仅简洁,而且易于理解。你可以在其中填充任何你需要的值,而不仅仅是0。

此外,这种方式还可以用于创建其他类型的二维数组,比如初始化为其他值的数组。例如,如果你想创建一个9*9的二维列表,其中每个元素都是1,可以这样写:

2d_list = [[1 for col in range(9)] for row in range(9)]

如果你需要创建一个包含不同值的二维列表,只需将0替换为你需要的值即可。例如,创建一个4*4的二维列表,其中第一行的元素是1,其余元素是0:

2d_list = [[1 if col == 0 else 0 for col in range(4)] for row in range(4)]

通过这种方式,你可以创建出各种不同需求的二维列表,适用于多种场景。

python的二维数组

NumPy是Python中用于科学计算的基础库,提供了强大的多维数组对象和各种数学运算功能。以下是NumPy的基本操作总结,涵盖了日常使用中最常用的功能:

1. 创建数组一维数组import numpy as np# 创建一个0-9的数组对象,arange为左闭右开区间data = np.arange(10)print(data)# dtype可以指定类型data = np.array([1, 2, 3], dtype=int)print(data)二维数组# 方法1:直接创建data = np.array([(1.5, 2, 3), (4, 5, 6)], dtype=float)print(data)# 方法2:通过reshape转换data = np.arange(10).reshape(2, 5)print(data)特殊数组# 创建内容随机的数组(依赖内存状态)data = np.empty((2, 3))print(data)# 创建全1数组data = np.ones((2, 3, 4), dtype=int)print(data)# 创建全0数组data = np.zeros((3, 4), dtype=int)print(data)2. 基本运算a = np.array([1, 2, 3, 4, 5])b = np.array([2])# 加减乘除(广播运算)print(a + b)print(a - b)print(a * b)print(a / b)# 幂次方print(a3)# 矩阵乘积c = np.array([1, 2, 3, 4, 5])print(np.dot(a, c))3. 排序a = np.array([1, 3, 2, 4])# 从小到大排序print(np.sort(a))4. 数学函数x = np.linspace(0, 10, 3)# 三角函数print(np.sin(x))print(np.cos(x))# 指数和对数print(np.exp(x))print(np.sqrt(x))5. 切片和索引a = np.arange(10).reshape(2, 5)print(a)# 访问元素print(a[1][2])# 第1维度的第2个元素print(a[1][2:5])# 第1维度的2-4个元素(左闭右开)# 高级切片print(a[::-1])# 颠倒数组print(a[:, 3])# 所有维度的第3个元素print(a[0:2, 3])# 第0到1维度的第3个元素# 展平数组print(a.ravel())6. 数组属性data = np.arange(10).reshape(2, 5)# 数组维度(秩)print(data.ndim)# 数组形状print(data.shape)# 数组元素总数print(data.size)# 数组元素类型print(data.dtype)# 每个元素的字节大小print(data.itemsize)# 数组数据缓冲区(通常不直接使用)print(data.data)7. 统计运算a = np.array([1, 2, 3, 4])# 求和print(a.sum(axis=0))# 最小值print(a.min(axis=0))# 最大值print(a.max(axis=0))# 累加print(a.cumsum(axis=0))8. 条件筛选a = np.array([1, 2, 3, 4, 5])# 筛选大于3的元素print(a[a > 3])# 多条件筛选print(a[(a > 1) & (a < 5)])9. 数组操作a = np.array([1, 2, 3])b = np.array([4, 5, 6])# 垂直堆叠print(np.vstack((a, b)))# 水平堆叠print(np.hstack((a, b)))# 分割数组a = np.arange(9).reshape(3, 3)print(np.hsplit(a, 3))# 水平分割print(np.vsplit(a, 3))# 垂直分割10. 线性代数a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])# 矩阵乘法print(np.matmul(a, b))# 矩阵转置print(a.T)# 矩阵求逆print(np.linalg.inv(a))# 行列式print(np.linalg.det(a))

这些操作涵盖了NumPy在日常使用中的大部分功能,包括数组创建、基本运算、数学函数、切片索引、统计计算和线性代数等。

python二维列表

在Python中修改二维数组元素时,为避免引用陷阱,需确保每一行是独立的列表对象,可通过列表推导式创建真正的二维数组。

问题根源:直接使用乘法操作符(如[0]*n)或重复引用同一列表(如white_board.append(white_board[0]))创建二维数组时,所有行会指向同一列表对象。修改任一行元素会导致所有行同步变化,因它们本质是同一内存地址的引用。

解决方案:使用列表推导式生成独立的行列表。例如,创建100x100的二维数组时,代码应为:

white_board = [[0] * 100 for _ in range(100)]

此方式会循环生成100个独立的[0]*100列表,确保每行数据互不干扰。

代码示例与修正:原错误代码可能如下:

# 错误示例:所有行引用同一列表row = [0] * 100white_board = [row] * 100# 100个引用指向同一rowwhite_board[0][0] = 1# 修改会导致所有行的[0][0]变为1

修正后代码:

# 正确示例:每行独立white_board = [[0] * 100 for _ in range(100)]white_board[0][0] = 1# 仅修改第一行第一列

完整应用场景代码:以下代码演示如何正确修改二维数组元素(如计算覆盖区域):

# 初始化100x100的独立二维数组white_board = [[0] * 100 for _ in range(100)]n = int(input())# 输入点的数量posL = []# 读取所有点坐标for _ in range(n):a, b = map(int, input().split())posL.append((a, b))# 标记覆盖区域(每个点为中心的10x10正方形)for y in posL:indY = 100 - y[1]# 转换y坐标为数组索引for _ in range(10):# 遍历正方形的10行indX = y[0] - 1# 转换x坐标为数组索引for _ in range(10):# 遍历正方形的10列if 0 <= indY < 100 and 0 <= indX < 100:# 边界检查if white_board[indY][indX] == 0:white_board[indY][indX] = 1indX += 1indY -= 1# 统计被覆盖的单元格总数total_inked_area = sum(row.count(1) for row in white_board)print(total_inked_area)

关键注意事项

边界检查:在修改数组元素时,需确保索引不越界(如0 <= indY < 100)。

python定义二维空数组

Python中创建二维列表/数组,即创建一个list,并且这个list的元素还是list。可以用列表解析的方法实现。

创建例子如下:

2d_list = [[0 for col in range(cols)] for row in range(rows)]

其中cols, rows变量替换为你需要的数值即可,例如:

2d_list = [[0 for col in range(9)] for row in range(9)]# 9*9的二维列表

以上就是python如何定义二维数组的全部内容,1. 使用Python内置列表(推荐基础场景)# 定义一维空列表empty_list_1d = []# 定义二维空列表(需初始化嵌套结构)empty_list_2d = [[] for _ in range(3)] # 创建3行空列表的二维结构关键说明:列表是Python原生数据结构,无需额外依赖二维列表需通过列表推导式初始化,内容来源于互联网,信息真伪需自行辨别。如有侵权请联系删除。

猜你喜欢