本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享
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]]
[