【问题标题】:I have to print a grid with a space after every 3 elements in a row and a blank line after every three row, but I could not figure out the code我必须在一行中每 3 个元素之后打印一个带有空格的网格,每三行之后打印一个空行,但我无法弄清楚代码
【发布时间】:2021-02-11 21:36:21
【问题描述】:

我有一个 2D 列数组 = [[1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3], [4, 4, 4, 4, 4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6, 6, 6, 6, 6], [7, 7, 7, 7, 7, 7, 7, 7, 7], [8, 8, 8, 8, 8, 8, 8, 8, 8], [9, 9, 9, 9, 9, 9, 9, 9, 9]],我必须像这样打印出来

enter image description here

    for n in range(9):
    for i in range(len(grid)):
        for j in range(len(grid)):
            print(grid[j][i] , ' ', end = '')

【问题讨论】:

    标签: python-3.x list loops


    【解决方案1】:

    使用str.formatenumerate 的一种方式:

    fmt = "{}{}{} {}{}{} {}{}{}"
    for n, g in enumerate(zip(*grid), 1):
        print(fmt.format(*g))
        if not n % 3:
            print("")
    

    输出:

    123 456 789
    123 456 789
    123 456 789
    
    123 456 789
    123 456 789
    123 456 789
    
    123 456 789
    123 456 789
    123 456 789
    

    【讨论】:

      【解决方案2】:

      假设嵌套数组的长度都相同,您可以这样做:

      from collections import defaultdict
      result = defaultdict(str)
      your_array = [[1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3], [4, 4, 4, 4, 4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6, 6, 6, 6, 6], [7, 7, 7, 7, 7, 7, 7, 7, 7], [8, 8, 8, 8, 8, 8, 8, 8, 8], [9, 9, 9, 9, 9, 9, 9, 9, 9]]
      
      for n in range(len(your_array[0])):
        for i in range(len(your_array)):
         result[n] += ' ' if i%3 == 0 else ''
         result[n] += str(your_array[i][n])
      
      for line, j in result.items():
        if line % 3 == 0:
          print('')
        print(j)
      

      输出:

       123 456 789
       123 456 789
       123 456 789
      
       123 456 789
       123 456 789
       123 456 789
      
       123 456 789
       123 456 789
       123 456 789
      

      评论更新

      defaultdict 在这里只是一个便利类,所以它是完全可选的。没有 defaultdict 的相同代码如下所示:

      result = {}
      your_array = [[1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3], [4, 4, 4, 4, 4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6, 6, 6, 6, 6], [7, 7, 7, 7, 7, 7, 7, 7, 7], [8, 8, 8, 8, 8, 8, 8, 8, 8], [9, 9, 9, 9, 9, 9, 9, 9, 9]]
      
      for n in range(len(your_array[0])):
        for i in range(len(your_array)):
         if n not in result:
           result[n] = ''
         result[n] += ' ' if i%3 == 0 else ''
         result[n] += str(your_array[i][n])
      
      for line, j in result.items():
        if line % 3 == 0:
          print('')
        print(j)
      

      此外,如果您想按照下面的建议使用 zip,您的代码将简化为:

      your_array = [[1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3], [4, 4, 4, 4, 4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6, 6, 6, 6, 6], [7, 7, 7, 7, 7, 7, 7, 7, 7], [8, 8, 8, 8, 8, 8, 8, 8, 8], [9, 9, 9, 9, 9, 9, 9, 9, 9]]
      
      your_array = zip(*your_array)
      for idx, sub_array in enumerate(your_array):
        result_str = ''
        for sub_idx, value in enumerate(sub_array):
         result_str += ' ' if sub_idx%3 == 0 else ''
         result_str += str(value)
        if idx % 3 == 0:
          print('')
        print(result_str)
      

      【讨论】:

      • 不导入defaultdict是否可以解决?
      • 见上文,我添加了不使用 defaultdict 的代码,以及使用 zip 的更短的替代方法
      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多