2014-01-24 36 views
3
二維列表迭代

我第一次嘗試做到這一點了:隨機通過在Python

def rand_Random(self): 
    randomRangeI = range(self.gridWidth) 
    shuffle(randomRangeI) 
    randomRangeJ = range(self.gridHeight) 
    shuffle(randomRangeJ) 

    for i in randomRangeI: 
     for j in randomRangeJ: 
      if self.grid[i][j] != 'b': 
       print i, j 
       self.grid[i][j].colour = self.rand_Land_Picker() 

其中有一次通過一個內部列表去的問題:

[1] [1 ..X]

[2] [1..X]

我想能夠做的是在隨機(無重複)通過完全2D陣列迭代。

任何人都可以解決這個問題嗎?

編輯:感謝您的回覆,它似乎是我查看二維數組在我腦海中與大多數不同的方式!

回答

5

所有可能對座標創建一個數組,這個洗牌通過正常循環。

import random 
coords = [(x,y) for x in range(self.gridWidth) for y in range(self.gridHeight) 
random.shuffle(coords) 
for i,j in coords: 
    if self.grid[i][j] != 'b': 
     print i, j 
     self.grid[i][j].colour = self.rand_Land_Picker() 
+0

工作就像一個魅力,歡呼! – Darkstarone

3

您可以將二維數組視爲一維數組並隨機遍歷它。

def rand_Random(self): 
    randomRange = range(self.gridWidth*self.gridHeight) 
    shuffle(randomRange) 

    for index in randomRange: 
     i = index/self.gridWidth 
     j = index % self.gridWidth 
     if self.grid[i][j] != 'b': 
      print i, j 
      self.grid[i][j].colour = self.rand_Land_Picker() 
2

你可以這樣做:

randomRange = range(w*h) 
shuffle(randomRange) 

for n in randomRange: 
    i = n/w 
    j = n%w 

這裏randomRange基本枚舉所有的座標,從0w*h-1

更漂亮,ij,可以在一條語句中找到:

i,j = divmod(n, w)