我首次尝试完成此任务导致:
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数组(没有重复)。
任何人都有解决这个问题的方法吗?
编辑:感谢您的回复,看起来我在脑海中观看2D阵列的方式与大多数人不同!
答案 0 :(得分: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()
答案 1 :(得分:3)
您可以将2D数组视为一维数组并随机迭代它。
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 :(得分:2)
您可以执行以下操作:
randomRange = range(w*h)
shuffle(randomRange)
for n in randomRange:
i = n/w
j = n%w
此处randomRange
基本上列举了从0
到w*h-1
的所有坐标。
更漂亮的i
和j
可以在一个声明中找到:
i,j = divmod(n, w)