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

Python 2.7二维列表赋值异常求助:输入与输出不符问题

问题分析与解决

嘿,这个坑我刚学Python的时候也踩过!咱们来一步步拆解问题出在哪:

核心问题:[[0]*n]*n的陷阱

你创建二维列表的这行代码:

a = [[0]*n]*n

看起来是生成了n个长度为n的列表,但实际上它只是创建了一个列表对象,然后把这个对象的引用重复了n次。也就是说,a[0]、a[1]、a[2]其实指向的是同一个列表。所以当你在循环里修改a[i][j]的时候,所有行的对应位置都会被修改——因为它们本质上是同一个列表!

这就是为什么最后输出的三行全是最后一次输入的101对应的[1, 0, 1]:前面两次输入的101和010其实都被最后一次的赋值覆盖了,所有行同步变化。

修复方案:创建独立的子列表

把创建二维列表的代码改成列表推导式,这样每一行都是独立的新列表:

n = int(raw_input())
# 用列表推导式生成n个独立的子列表
a = [[0]*n for _ in xrange(n)]
for i in xrange(0,n):
    s = raw_input()
    for j in xrange(0,n):
        a[i][j] = int(s[j])
print a

这个写法里,for _ in xrange(n)会循环n次,每次都生成一个新的[0]*n列表,所以a的每一行都是完全独立的对象,修改其中一行不会影响其他行。

现在再输入3、101、010、101,输出就会是你预期的:

[[1, 0, 1], [0, 1, 0], [1, 0, 1]]

额外提醒

顺便提一句,Python 2.7已经在2020年停止官方维护了,如果你之后有新的项目,建议升级到Python 3.x版本,它有更多新特性和更完善的支持哦~

内容的提问来源于stack exchange,提问作者Vaibhav Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:48:03