2014-01-24 35 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)