2017-03-17 3 views
0

私はPythonで2Dリストに問題があります。私はボードの中央に言葉を書いています。代わりに、私はすべての行の真ん中に書かれた言葉を得る。誰かが私にそのことをなぜ説明し、私に解決策を提供するのか説明することができましたか?2DリストはPythonで一度だけでなくすべての行で書く

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

あなたが繰り返しrowを使用してboardを構築方法は、変更が各行に表示されるようになります。ボードを構築するには少し異なるアプローチをとってください。あなたのコードは意図どおりに動作するはずです。

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を定義し、その同じ回を追加するとは何かを持っていると思います。したがって、あなたは3種類の異なるrowを持っていません。あなたはSAME rowへの3つの参照があります。私はそれがやっていることだと思うし、あなたが望むものだとは思わない。

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

あなたは本当に新しい行を追加したいのですが、代わりにあなたが同じ行にすべての時間を参照を追加します。

0

の理由は、あなたがボード、このコードの塊を構築するために同じ行を追加しています。これは、メモリ内の同じ位置を指すn個の参照を格納することを意味します。したがって、一方を変更すると、他の参照に影響します。

あなたはすぐにこのようなボードを作成することができ、このコードも高速に実行

board = [['']*n for _ in range(n)] 
関連する問題