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

Python嵌套for循环向二维数组赋值时旧值被新输入覆盖问题

二维数组赋值覆盖问题:原因及解决方法

问题原因

核心问题出在列表的引用复制机制:
当你用[[0]*match_no] * league_size初始化二维数组时,[0]*match_no仅创建了一个子列表,而* league_size只是将这个子列表的引用重复了league_size次,并非生成league_size个独立的子列表。

这意味着team_points中的所有元素本质上指向同一个内存地址的列表。所以当你在第二次循环(i=1)修改team_points[1][j]时,实际是在修改那个唯一的子列表,自然会覆盖第一次循环(i=0)输入的值。

而手动初始化的[[0,0,0], [0,0,0]]是显式创建了两个独立的子列表,它们拥有各自独立的内存空间,修改其中一个不会影响另一个,因此能正常保存值。

解决方法

要创建包含独立子列表的二维数组,改用列表推导式初始化:

league_size = int(input("How many teams are in the league?"))
match_no = int(input("How many matches are played?"))
# 列表推导式生成独立子列表
team_points = [[0]*match_no for _ in range(league_size)]

for i in range(len(team_points)):
    for j in range(len(team_points[i])):
        point = int(input(f"Input point of {j+1} match for team {i+1}: "))
        team_points[i][j] = point
print(team_points)

列表推导式[[0]*match_no for _ in range(league_size)]会循环league_size次,每次都创建一个新的[0]*match_no子列表,确保每个子列表都是独立对象,互相不会干扰。

也可以用循环逐个初始化子列表,效果完全一致:

team_points = []
for _ in range(league_size):
    team_points.append([0]*match_no)

内容的提问来源于stack exchange,提问作者jannik thome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:00:05