我正在尝试获取一个网格的索引列表,其中元素是!= 0(最后一部分与问题无关,但我想我会添加它)
#creating the grid
grid = [[0 for x in range(4)] for y in range(5)]
#taking each elements index
grid = [[[x,y] for x, Cell in enumerate(Row) if Cell == 0 ] for y, Row in enumerate(grid)]
print grid #indexes
[[(0, 0), (1, 0), (2, 0), (3, 0)], [(0, 1), (1, 1), (2, 1), (3, 1)], [(0, 2), (1, 2), (2, 2), (3, 2)], [(0, 3), (1, 3), (2, 3), (3, 3)], [(0, 4), (1, 4), (2, 4), (3, 4)]]
我现在需要选择一个随机索引。我打算使用random.choice(),但是因为它是一个列表列表,这将是有问题的。我意识到我可以做两个random.choice()但我宁愿更好地理解列表理解。
谢谢
编辑:
我能够在没有LC的情况下做到这一点:
index = []
for y, Row in enumerate(grid):
for x, Cell in enumerate(Row):
if self.grid[y][x] == 0:
index.append((x,y))
答案 0 :(得分:1)
你在这里:
In[21]: [(x,y) for x in range(4) for y in range(5)]
Out[21]:
[(0, 0),
(0, 1),
(0, 2),
(0, 3),
(0, 4),
(1, 0),...
只需删除你理解中的列表即可构建所有索引。
修改强> 摆脱创建的中间列表的代码
grid = [(x,y) for x, Cell in enumerate(Row) if Cell == 0 for y, Row in enumerate(grid)]
这应该有用。