从Sudoku解决方案中提取框作为列表列表

时间:2013-09-20 23:54:44

标签: python sudoku

def sqrs(seq):
  boxes = [[] for x in range(0,9)]
  j = 0
  for y in range(0, 7, 3):
    for x in range(0, 7, 3):
      for i in range(0, 3):
        boxes[j].extend(seq[y + i][x:x + 3])
      j += 1
  return boxes

因此,此函数运行一个列表列表,该列表是9x9数独解决方案,并将每个3x3框转移到另一个列表列表。它完成了这项工作,但看起来很丑陋。有没有人知道有一种更明智的方式来完成这项工作?

不,我不能使用numpy。 :(

1 个答案:

答案 0 :(得分:1)

您的示例未运行,因为未定义li,但如果我了解您要执行的操作,并且您不关心每个框中数字列表的顺序,那么这是有效的 - 如果你认为它更光滑,这取决于你。

def sqrs(seq):
    indices = [(x % 3, x / 3) for x in range(0, 9)]  # Set up a list of coordinates
    boxes = [[seq[x*3+xx][y*3+yy] for xx, yy in indices] for x, y in indices]  # Use the list of coordinates both to reference the boxes and to reference the cells within the box, to reorganize the list.
    return boxes