python中的2D列表在每一行写入而不是一次

时间:2017-03-17 02:23:35

标签: python list multidimensional-array

我在Python中使用2D列表时遇到了问题。我想在董事会中间写一个字。相反,我把这个词写在每一行的中间。有人可以向我解释为什么会这样做并为我提供解决方案吗?

row = []
board = []
n = 21
longest =  "WORD"
for x in range(0, n):
    row.append('')
for x in range(0, n):
    board.append(row)
midway = len(board)/2
for x in range(0, len(board)):
    if x == midway:
        for y in range(0, len(board)):
            if y >= midway and y < midway + len(longest):
                board[midway][y] = longest[y - midway]
print board

3 个答案:

答案 0 :(得分:0)

您使用board重复构建row的方式会导致更改出现在每一行上。采用稍微不同的方法来构建电路板,您的代码应该按预期工作。

board = []
n = 21
longest =  "WORD"
for x in range(0, n):
    board.append([''] * n)
midway = len(board)/2
for y in range(0, len(board)):
    if y >= midway and y < midway + len(longest):
       board[midway][y] = longest[y - midway]
print board

(你的外环是不必要的,所以它也被删除了。)

答案 1 :(得分:0)

我认为这与您在第1行中定义row然后将同一row追加到board 3次有关。所以你没有3个不同的row。您有3个对SAME row的引用。我认为这是它的所作所为,我不认为这是你想要的。

答案 2 :(得分:0)

原因是你追加相同的行来构造一块板,这块代码:

for x in range(0, n):
    row.append('')
for x in range(0, n):
    board.append(row)

您确实想要追加新行,而是始终添加对同一行的引用。这意味着你存储了指向内存中相同位置的n个引用,因此你对一个引用进行了更改,它将影响其他引用。

您可以快速创建这样的电路板,此代码也可以更快地运行

board = [['']*n for _ in range(n)]