将多个列表理解组合成一个列表列表

Combining multiple list comprehensions into a list of lists

我知道有与我的标题类似的问题,但我找不到与我在下面概述的问题类似的问题:

我正在尝试将以下 9 个列表理解存储到一个列表中,以便每个列表理解本身都是新列表中的一个列表:

a = [(i,j) for i in range(3) for j in range(3)]
b = [(i,j) for i in range(3) for j in range(3,6)]
c = [(i,j) for i in range(3) for j in range(6,9)]

d = [(i,j) for i in range(3,6) for j in range(3)]
e = [(i,j) for i in range(3,6) for j in range(3,6)]
f = [(i,j) for i in range(3,6) for j in range(6,9)]

g = [(i,j) for i in range(6,9) for j in range(3)]
h = [(i,j) for i in range(6,9) for j in range(3,6)]
i = [(i,j) for i in range(6,9) for j in range(3,9)]

具体来说,这些打印出数独板中 BLOCKS 的索引。我希望将每个块作为一个列表中的列表。

谁能给我指出正确的方向。

谢谢

我可以想到两种方法,两种方法都是对您所拥有内容的微不足道的重写:

1) master_list = [a,b,c,d,e,f,g,h,i] 也就是说,只需将您获得的单独命名的列表放入列表中即可。

2)

master_list = [
    [(i,j) for i in range(3) for j in range(3)],
    [(i,j) for i in range(3) for j in range(3,6)],
    [(i,j) for i in range(3) for j in range(6,9)],

    [(i,j) for i in range(3,6) for j in range(3)],
    [(i,j) for i in range(3,6) for j in range(3,6)],
    [(i,j) for i in range(3,6) for j in range(6,9)],

    [(i,j) for i in range(6,9) for j in range(3)],
    [(i,j) for i in range(6,9) for j in range(3,6)],
    [(i,j) for i in range(6,9) for j in range(3,9)],
]

本质上是一样的,只是没有中间变量名。

合理化一点,可以定义一个函数

def f(b, r):
    return [(i, j) for i in range(b, b+3) for j in range(*r)]

并以所需的范围驱动它

ml = [f(b, r) for b in range(0, 9, 3) for r in ((0, 3), (3, 6), (6, 9))]

不确定你的最后一行是否正确,但很确定应该是

[(i,j) for i in range(6,9) for j in range(6,9)]

不是

[(i,j) for i in range(6,9) for j in range(3,9)]

因为这是 3x6 网格。

尽管如此,这是用于创建 9 个 3x3 网格的更清晰的列表组合:

[[(x0*3 + i, y0*3 + j) for x in range(3) for y in range(3)] for x0 in range(3) for y0 in range(3)]