2014-03-04 57 views
4

我想創建初始設置爲0Pythonic創建2d數組的方法?

這是我會怎樣想做到這一點整數值的二維數組:

grid = [[0] * width] * height 

但是,這僅僅是創建每一行作爲參考的原始資料,所以做類似

grid[0][1] = 1 

將修改所有grid [n] [1]值。

這是我的解決方案:

grid = [[0 for x in range(width)] for y in range(height)] 

感覺不對,有沒有更好的更Python的方式來做到這一點?

編輯: 獎金的問題,如果網格大小永遠不會改變,只會包含整數,我應該使用像tuple或array.array而不是?

回答

4

Since numbers are immutable, using * to create a list should be fine。因此,二維列表初始化可以這樣

[[0] * width for y in range(height)] 
+0

爲什麼不:'[0] *寬* height' – zeffii

+1

@zeffii這將只創建一個列表'[0] *寬]'(認爲這是'l1'),並創建一個列表其中'height'元素中的所有元素都是對'l1'的引用。所以,更改任何列表也會反映在所有其他列表中。 – thefourtheye

+0

優秀,謝謝! – zeffii

1

來完成,您可以使用numpy.zeros

import numpy as np 
numpy.zeros(height, width) 

如果它是作爲選件dtype=numpy.int8

+0

是的,我以前用numpy做過,但我試圖避免當前項目的外部依賴關係。 – Igglyboo

0

整數這裏使用的是我用什麼。

def generate_board(n): #Randomly creates a list with n lists in it, and n random numbers 
         #in each mini list 
    list = [] 
    for i in range(0, n): 
     list.append([]) 
     for j in range(0, n): 
      list[i].append(random.randint(0, 9)) 
    return list 

def print_board(board): 
    n = len(board) - 1 
    while n > -1: 
     print str(board[n]) + ' = ' + str(n) 
     n -= 1