(python)如何生成一系列continuation元素而不是嵌套列表推导列表

时间:2016-05-05 08:11:05

标签: python list list-comprehension

我正在尝试获取一个网格的索引列表,其中元素是!= 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))

1 个答案:

答案 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)]

这应该有用。