替换2d数组中的元素时出现奇怪的错误

时间:2013-11-19 03:23:47

标签: python

in_file = open("3.8.2.txt",'r')


height = 8
width = 11
board = []
liner = []
for i in range(200):
    liner.append("0")
for i in range(200):
    board.append(liner)

for i in range(height):
    line = in_file.readline().strip("\n").lower()
    for j in range(len(line)):
        board[50 + i][50 + j] = line[j]

我正试图在一堆0的周围放置一个2d板。不是在中间放置一块漂亮的电路板,而是将电路板的最后一行放在电路板上每一行的中间。我不明白为什么。

以下是输出:

00000000000000000000000000000000000000000000000000yuiqlxcnbjf000000000000000000000000
00000000000000000000000000000000000000000000000000yuiqlxcnbjf000000000000000000000000
00000000000000000000000000000000000000000000000000yuiqlxcnbjf000000000000000000000000
00000000000000000000000000000000000000000000000000yuiqlxcnbjf000000000000000000000000
00000000000000000000000000000000000000000000000000yuiqlxcnbjf000000000000000000000000

我的预期输出将是这样的:

000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000
00000000000000000letterss00000000000000000000000000000
00000000000000000letterss00000000000000000000000000000
00000000000000000letterss00000000000000000000000000000
00000000000000000letterss00000000000000000000000000000
00000000000000000letterss00000000000000000000000000000
000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000

1 个答案:

答案 0 :(得分:3)

实际问题在于这些

for i in range(200):
    board.append(liner)

您没有创建200个新列表并将其附加到board。相反,您将向板中的相同列表添加200个引用。你应该做的是,创建linear的副本并将其附加到这样的

for i in range(200):
    board.append(liner[:])

董事会准备可以这样写出

board = [["0"] * 200 for _ in range(200)]