Python的二维数组初始化正确吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1496个文字,预计阅读时间需要6分钟。
这是刷题避坑系列的第一篇文章,本系列帮助大家避开刷题/代码中常见的坑、怪事。在Python中,定义长度为5的一维数组,所有数值为0。
这是「刷题躲坑」系列的第一篇文章,这个系列帮助大家躲掉刷题/代码中常见的坑。
怪事
在 Python 中,定义长度为 3,数值全为 0 的一维列表(也就是数组)的方式有:
a = [0, 0, 0]a = [0 for _ in range(3)]
a = [0] * 3
在刷算法题是,我们常常遇到的一个场景,就是需要定义一个和输入等长的一维列表。所以,我基本都是用上述的第 3 种方式。
如:
a = [0] * len(nums)假设 nums 的长度是 5,那么运行完上述代码以后,a 的值为 [0, 0, 0, 0, 0]。
我们修改一下 a 列表:
In [1]: a[0] = 666In [2]: a
Out[2]: [666, 0, 0, 0, 0]
可以看到,修改 a 列表的第 0 个元素并不会影响到其他位置的元素。
这是理所当然的事情。
可是,当数组变成二维的时候,怪事就发生了。
按照上述定义一维数组的思路,定义一个 3 行 2 列的二维数组 b:
In [1]: b = [[0] * 2] * 3In [2]: b
Out[2]: [[0, 0], [0, 0], [0, 0]]
看起来 b 是符合要求的,没问题吧。
本文共计1496个文字,预计阅读时间需要6分钟。
这是刷题避坑系列的第一篇文章,本系列帮助大家避开刷题/代码中常见的坑、怪事。在Python中,定义长度为5的一维数组,所有数值为0。
这是「刷题躲坑」系列的第一篇文章,这个系列帮助大家躲掉刷题/代码中常见的坑。
怪事
在 Python 中,定义长度为 3,数值全为 0 的一维列表(也就是数组)的方式有:
a = [0, 0, 0]a = [0 for _ in range(3)]
a = [0] * 3
在刷算法题是,我们常常遇到的一个场景,就是需要定义一个和输入等长的一维列表。所以,我基本都是用上述的第 3 种方式。
如:
a = [0] * len(nums)假设 nums 的长度是 5,那么运行完上述代码以后,a 的值为 [0, 0, 0, 0, 0]。
我们修改一下 a 列表:
In [1]: a[0] = 666In [2]: a
Out[2]: [666, 0, 0, 0, 0]
可以看到,修改 a 列表的第 0 个元素并不会影响到其他位置的元素。
这是理所当然的事情。
可是,当数组变成二维的时候,怪事就发生了。
按照上述定义一维数组的思路,定义一个 3 行 2 列的二维数组 b:
In [1]: b = [[0] * 2] * 3In [2]: b
Out[2]: [[0, 0], [0, 0], [0, 0]]
看起来 b 是符合要求的,没问题吧。

