我在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
答案 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)]