【问题标题】:Combining multiple list comprehensions into a list of lists将多个列表推导组合成列表列表
【发布时间】:2018-03-15 15:18:23
【问题描述】:

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

我正在尝试将以下 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)]

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

谁能指出我正确的方向。

谢谢

【问题讨论】:

    标签: python numpy list-comprehension sudoku


    【解决方案1】:

    我可以想到两种方法,都是对你所拥有的东西进行微不足道的重写:

    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)],
    ]
    

    这本质上是相同的,但没有中间变量名称。

    【讨论】:

      【解决方案2】:

      不确定你的最后一行是否正确,相当肯定它应该是

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-14
          • 1970-01-01
          • 2023-02-21
          • 1970-01-01
          • 2016-07-16
          • 2019-02-13
          相关资源
          最近更新 更多