Python:正确生成列表的方法

简介: 在生成列表的时候,最好用 [0 for _ in range(n)] 的方式而不是 [0] * n 的方式生成,原因如下。
注意:在生成列表的时候,最好用 [0 for _ in range(n)] 的方式而不是 [0] * n 的方式生成,原因如下。

假设我们想要创建一个长度为 n = 2 列表 a 的时候,一般的做法有两种:a = [0] * na = [0 for _ in range(n)],在一维的时候两种方法没有区别。但是如果我们想要创建一个列表,列表中的每个元素都是长度为 m = 3 的列表时用两种方法出来的结果就是不同的:

n, m = 2, 3
a = [[0] * n] * m  # 用第一种方法生成的
# a = [[0, 0], [0, 0], [0, 0]]
b = [[0 for _ in range(n)] for _ in range(m)]  # 用第二种方法生成的
# b = [[0, 0], [0, 0], [0, 0]]

a[0][0] = 1  # 令 a 列表的第一个元素为 1
# a = [[1, 0], [1, 0], [1, 0]]
b[0][0] = 1
# b = [[1, 0], [0, 0], [0, 0]]

我们的预期结果是像 b 这样的,也就是第一个列表的第一个元素等于 1,但是列表 a 是将每一个列表的第一个元素都设为 1 了。

导致这种情况的原因在于,用第一种生成方法是类似于 = 的方式去生成的,也就是假设 a, b 都是列表,我们令 a = b ,如果他们其中一个的元素改变了,另一个也会跟着变,例如:

a = [0, 0, 0]
b = a
b[0] = 1
# a = [1, 0, 0]
# b = [1, 0, 0]

要想避免这样的情况,就应该这样写 b = list(a).

回到一开始的问题,如果用第一种方法 a = [[0] * n] * m,那么 a 中的 m 个列表存储的地址都是一样的,那么你改变其中的一个列表,其他的列表都会跟着改变,就会出现上面的情况。

c = [[0] * n for _ in range(m)]  # 没问题
d = [[0 for _ in range(n)]] * m  # 有问题

所以,以后要生成的列表时候,一律用 [0 for _ in range(n)] 会更好。

目录
相关文章
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
162 1
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
315 1
|
1月前
|
开发者 Python
Python列表推导式:优雅与效率的完美结合
Python列表推导式:优雅与效率的完美结合
371 116
|
1月前
|
Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
367 119
|
2月前
|
缓存 监控 数据可视化
微店item_search - 根据关键词取商品列表深度分析及 Python 实现
微店item_search接口可根据关键词搜索商品,返回商品信息、价格、销量等数据,适用于电商检索、竞品分析及市场调研。接口需通过appkey与access_token认证,支持分页与排序功能,Python示例代码实现调用流程,助力商品数据高效获取与分析。
|
1月前
|
开发者 Python
Python列表推导式:优雅与效率的完美融合
Python列表推导式:优雅与效率的完美融合
319 104
|
1月前
|
Python
Python列表推导式:优雅与效率的艺术
Python列表推导式:优雅与效率的艺术
245 99
|
1月前
|
数据处理 Python
解锁Python列表推导式:优雅与效率的完美融合
解锁Python列表推导式:优雅与效率的完美融合
261 99
|
1月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
356 95
|
2月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
428 99

推荐镜像

更多
下一篇
oss云网关配置