在Python中随机迭代一个二维列表

3

我的第一次尝试是这样的:

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]

我想要做的是完全随机地遍历这个二维数组(没有重复的元素)。

有人对这个问题有解决方案吗?

编辑:感谢回复,看来我在脑海中看待二维数组的方式与大多数人不同!

3个回答

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()

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接