鱼C论坛

 找回密码
 立即注册
查看: 1726|回复: 5

[已解决]通过列表与整数相乘,构建矩阵

[复制链接]
发表于 2023-6-25 22:10:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
matrix = [[0] * 3] * 3
matrix[0][0] = 1
print(matrix)

我以为这段代码的输出应该是:[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
但事实上,输出却是:[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

这是为啥呢?
想破头了也想不出
最佳答案
2023-6-25 22:16:11
这个问题出在Python对列表(list)的处理方式上。在Python中,列表是可变的(mutable),当你创建一个由列表构成的列表(即二维列表)时,Python中的“乘法”操作其实创建的是对原列表的引用,而非复制整个列表。

因此, matrix = [[0] * 3] * 3 这行代码实际上创建的是一个由三个相同的列表引用构成的列表。也就是说, matrix[0] , matrix[1] 和 matrix[2] 其实是同一个列表。所以,当你修改其中一个列表的元素时(例如执行 matrix[0][0] = 1 ),所有的列表都会被改变。

如果你想要创建一个每个元素都是独立的二维列表,你需要创建每个子列表的新的副本,而不是引用。你可以使用列表推导式(list comprehension)来实现这个功能:
matrix = [[0] * 3 for _ in range(3)]
matrix[0][0] = 1
print(matrix)

这段代码会得到你预期的输出: [[1, 0, 0], [0, 0, 0], [0, 0, 0]] 。因为在这里, [0] * 3 在每次循环中都会创建一个新的列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-25 22:16:11 | 显示全部楼层    本楼为最佳答案   
这个问题出在Python对列表(list)的处理方式上。在Python中,列表是可变的(mutable),当你创建一个由列表构成的列表(即二维列表)时,Python中的“乘法”操作其实创建的是对原列表的引用,而非复制整个列表。

因此, matrix = [[0] * 3] * 3 这行代码实际上创建的是一个由三个相同的列表引用构成的列表。也就是说, matrix[0] , matrix[1] 和 matrix[2] 其实是同一个列表。所以,当你修改其中一个列表的元素时(例如执行 matrix[0][0] = 1 ),所有的列表都会被改变。

如果你想要创建一个每个元素都是独立的二维列表,你需要创建每个子列表的新的副本,而不是引用。你可以使用列表推导式(list comprehension)来实现这个功能:
matrix = [[0] * 3 for _ in range(3)]
matrix[0][0] = 1
print(matrix)

这段代码会得到你预期的输出: [[1, 0, 0], [0, 0, 0], [0, 0, 0]] 。因为在这里, [0] * 3 在每次循环中都会创建一个新的列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-26 10:03:23 | 显示全部楼层
isdkz 发表于 2023-6-25 22:16
这个问题出在Python对列表(list)的处理方式上。在Python中,列表是可变的(mutable),当你创建一个由列 ...

这是哪个ai平台的答案啊?文心一言?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-26 10:04:07 | 显示全部楼层
isdkz 发表于 2023-6-25 22:16
这个问题出在Python对列表(list)的处理方式上。在Python中,列表是可变的(mutable),当你创建一个由列 ...

哦,又是你,加个好友
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-26 10:04:21 | 显示全部楼层
hhiop 发表于 2023-6-26 10:03
这是哪个ai平台的答案啊?文心一言?

文心一言没有那么好用,我用的是openai官方的chatgpt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-26 10:08:52 | 显示全部楼层
hhiop 发表于 2023-6-26 10:03
这是哪个ai平台的答案啊?文心一言?

这个问题文心一言给出的答案是差不多的,文心一言应该是国内大模型走在最前面的了,确实值得一用

Snipaste_2023-06-26_10-07-31.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表