Python创建二维数组的正确姿势

本文探讨如何在Python中创建二维数组,比较使用列表和NumPy数组的不同。通过示例展示了列表创建多维数组时的浅拷贝问题,并详细介绍了NumPy的优势,如内存连续存储、向量化运算和多线程计算。此外,列举了NumPy创建数组的各种方法,包括arange、linspace、zeros、ones、full、eye、diag和random函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享

List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理,会发现列表是基于 PyListObject 实现的。PyListObject 是一个变长对象,所以列表的长度是随着元素多少动态改变的。同时它还支持插入和删除等操作,所以它还是一个可变对象。

可以简单理解为,Python 的列表是长度可变的数组。一般而已,我们用于列表创建都是一维数组。那么问题来,我们如果创建多维数组呢?

01 列表能创建多维数组?

列表是支持操作符,如果一个列表与 ‘ * ’ 号结合使用,能达到重复列表的效果。比如

list_one = [0]
list_two = [0] * 3
print(list_one)
print(list_two)

>>> 运行结果:

[0]
[0, 0, 0]

那么利用这个重复特性,我们是否可以来创建一个二维数组呢?于是乎,我进行一顿猛操作,结果就被我折腾出来了。

list_one = [0]
list_two = [[0] * 3] * 3
print(list_one)
print(list_two)

>>> 运行结果:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

看起来很完美的操作,但是如果进行一些列表更新操作,问题就显露出来了。比如我对 list_two 的更换中间位置的值,即对 list_two[1][1] 进行更换值。

list_two = [[0] * 3] * 3
print(list_two)

list_two[1][1] = 2
print(list_two)

不难发现,运行结果有点不对劲,列表中有三个位置的值也改变了。

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值