You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字符串转3×3矩阵异常求助:赋值结果不符合预期

问题分析与解决

你的代码问题出在矩阵初始化的方式上:

matrix = [[0]*3]*3

这行代码并没有创建3个独立的长度为3的子列表,而是让外层列表的3个元素全部指向同一个[0,0,0]列表对象。也就是说,matrix[0]、matrix[1]、matrix[2]其实是同一个列表的引用。

当你通过双层循环赋值时,每次修改matrix[i][j]本质上都是在修改那个唯一的子列表。第一次循环(i=0)把它改成['A','B','C'],第二次循环(i=1)改成['D','E','F'],第三次循环(i=2)改成['G','H','I'],最终三个“子列表”因为指向同一个对象,所以输出全是['G','H','I']。

修正方案

把矩阵初始化改成创建独立子列表的方式,比如用列表推导式:

input_str = "ABCDEFGHI"  # 避免用input作为变量名,它是Python内置函数

# 正确初始化3×3矩阵,每个子列表都是独立对象
matrix = [[0 for _ in range(3)] for _ in range(3)]

index = 0
for i in range(3):
    for j in range(3):
        matrix[i][j] = input_str[index]
        index += 1

print(matrix)

运行后就能得到预期的[['A','B','C'],['D','E','F'],['G','H','I']]。

更简洁的实现方式

你也可以直接利用字符串切片来生成矩阵,不需要循环赋值:

input_str = "ABCDEFGHI"
matrix = [list(input_str[i*3 : (i+1)*3]) for i in range(3)]
print(matrix)

这种方式更高效,也避免了初始化时的引用问题。

内容的提问来源于stack exchange,提问作者Jacky Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:45:36