【问题标题】:Character Picture Grid人物图片网格
【发布时间】:2020-05-30 00:03:01
【问题描述】:

这是我在 stackoverflow 中的第一个问题。很高兴加入社区

这是其中一本书中的一个问题:

假设您有一个列表列表,其中内部列表中的每个值都是一个单字符字符串,如下所示:

grid = [['.', '.', '.', '.', '.', '.'],
    ['.', '0', '0', '.', '.', '.'],
    ['0', '0', '0', '0', '.', '.'],
    ['0', '0', '0', '0', '0', '.'],
    ['.', '0', '0', '0', '0', '0'],
    ['0', '0', '0', '0', '0', '.'],
    ['0', '0', '0', '0', '.', '.'],
    ['.', '0', '0', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]

结果应该是:

..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....

我设法用这段代码得到了答案:

Num_of_grid = range(len(grid))
for y in Num_of_grid:
    for x in Num_of_grid:
        print(grid[x][y], end = "")
    print("")

但是,即使它解决了问题,但由于某种原因,我收到以下错误: Click here for error image

当我写下以下内容时 打印(x,y);它显示了我在循环中使用的范围的正确数量......这是(0,8),但它仍然让我超出范围。

【问题讨论】:

    标签: python list printing range


    【解决方案1】:

    这不起作用,因为网格不是方形的。 len(grid) 是 9,但 len(grid[x])(对于所有 x)只有 6!

    在二维列表上编写迭代的一种不太容易出错的方法是简单地迭代每个列表的元素:

    for row in grid:
        for cell in row:
            print(cell, end="")
        print("")
    

    运行这个,我看到图像被翻转了——幸运的是,用mapzip 转置二维列表并不难!

    for row in map(list, zip(*grid)):
        for cell in row:
            print(cell, end="")
        print("")
    

    或者使用join 把整个东西变成一个字符串:

    print("\n".join("".join(row) for row in map(list, zip(*grid))))
    

    【讨论】:

    • 这很奇怪,我们想出了完全相同的解决方案代码哈哈
    【解决方案2】:

    她的问题是你的网格不是正方形的。您有 9 行,每行 6 个项目。然而,在您的两个循环中,您都在迭代相同的索引范围。要解决此问题,请使用以下代码:

    Num_of_grid = range(len(grid))
    Num_of_item = range(len(grid[0]))
    for y in Num_of_item:
        for x in Num_of_grid:
            print(grid[x][y], end = "")
        print("")
    

    更好的是,使用numpy,创建一个数组,转置它,然后打印结果,这样:

    import numpy as np
    g = np.array(grid)
    print("\n".join("".join(l) for l in g.T))
    

    【讨论】:

      【解决方案3】:

      欢迎来到 SO 社区。​​p>

      所以我认为最好重新评估我们如何从二维数组/网格进行打印。

      Num_of_grid 是,在计算表达式之后,一个像这样的迭代:[0, 1, 2, 3, 4, 5, 6, 7, 8]。您将此范围用于 x y 迭代,即使您的形状/网格在水平方向上只有 6 宽。那么,会发生什么,在您的打印语句中,您试图访问一个不存在的[y]。例如,像grid[x][6] (7th)。正如预期的那样,您会收到一个IndexError,这正是我们所期望的。

      那么迭代二维列表的最佳方法是什么?

      我可能会建议一些更简洁的东西:

      grid = [...]
      
      for row in grid:
          for cell in row:
              print(cell, end="")
          print()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 2011-10-15
        • 1970-01-01
        • 2017-12-27
        • 1970-01-01
        • 2019-02-16
        相关资源
        最近更新 更多