2017-03-17 41 views
0

我在Python中遇到了2D列表問題。我想在董事會中間寫一個字。相反,我在每一行的中間寫上這個詞。有人可以向我解釋爲什麼這樣做併爲我提供解決方案嗎?您使用row反覆引起的變化出現在每一行構建board在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

的方式。採取稍微不同的方法來構建電路板,並且您的代碼應按預期工作。

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 

(你的外循環是不必要的,所以它也被刪除了。)

0

我認爲這是與你在第1行定義row再追加相同rowboard 3倍。所以你沒有3個不同的row s。您有3個對SAME row的引用。我認爲這就是它所做的,我不認爲這就是你想要的。

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)] 
相關問題