【问题标题】:How to store and print a list of numbers in matrix form(python) [closed]如何以矩阵形式存储和打印数字列表(python)[关闭]
【发布时间】:2015-09-22 19:14:00
【问题描述】:

我有一个数字列表,它们是 OCR 操作的输出数据。 有 40 个整数,我想以矩阵(8x5)的形式打印它们。 谁能帮助我如何在 Python 2.7 中做到这一点? 我不想手动输入元素。元素列表是使用 for 循环生成的,我只想以 8x5 矩阵的形式显示它们。

谢谢

【问题讨论】:

    标签: python matrix


    【解决方案1】:

    欢迎来到stackoverflow!以下适用于 8x5 显示器:

    import random, itertools
    
    #  Create a list of 40 random integers    
    l_ocr = random.sample(xrange(1024), 8*5)
    
    # Read 8 integers out of the list at a time
    for row in itertools.izip(*([iter(l_ocr)] * 8)):
        # For each integer in the row, print it right aligned
        for col in row:
            print "{:>6d} ".format(col),
        print   # Newline after each row
    

    给予:

       325     631     967     289     700     754     602     550 
       641      55     476     805     442     964     412     823 
       621     559     276     333     903     956     206     875 
       630     138     732     487     930     254     464     161 
       422     201     723     353     853     147     523     510
    

    【讨论】:

      【解决方案2】:

      另一种解决方案:

      def print_matrix(numbers, n):
          res = ''
          for i in range(len(numbers)):
              res += '{:2} '.format(numbers[i])
              if (i + 1) % n == 0:
                  res += '\n'
          print(res)
      

      输出:

      >>> print_matrix([i for i in range(40)], 5)
       0  1  2  3  4
       5  6  7  8  9
      10 11 12 13 14
      15 16 17 18 19
      20 21 22 23 24
      25 26 27 28 29
      30 31 32 33 34
      35 36 37 38 39
      

      【讨论】:

        【解决方案3】:

        只需使用list comprehensionrange() 函数。

        my_list = [1, 2, 3, ..., 40]
        array = [[my_list[j*5 + i] for i in range(5)] for j in range(8)]
        

        然后您可以使用任何函数将其显示为矩阵:

        for row in array:
            print(row)
        

        如果需要矩阵“漂亮”显示,可以使用HappyLeapSecond's solution

        print('\n'.join([''.join(['{:4}'.format(item) for item in row]) 
              for row in array]))
        

        查看示例:https://ideone.com/yOk1I5

        【讨论】:

        • 感谢您的回复,但我不想手动输入元素,我的元素是通过此函数生成的 - pytesseract.image_to_string(im),我想将其结果存储在一个数组中。 .然后打印同样的内容。
        • @yashWanthShetty image_to_string() 正在返回一个字符串,对吧?因此,您必须使用my_list = list(pytesseract.image_to_string(im)) 将其转换为列表。如果字符串包含 40 个字符,那么您可以使用我提供的代码将其转换为 8x5 矩阵。
        • 这几乎成功了,但我只能显示最后一个元素...其他所有内容都被覆盖,“my_list”只包含最后一个元素。如何解决这个问题?
        • @yashWanthShetty 您是否多次调用image_to_string(),例如在循环中?如果没有看到您的代码,我真的无法帮助您。
        • i=0 for a in range (1,9): for b in range(1,6): ball = th1[145*(a-1):145*a, (b-1)*171:171*b] cv.imwrite('OpImage{:>40}.png'.format(i),ball) im = Image.open("OpImage{:>40}.png".format(i)) print pytesseract.image_to_string(im) #我要把这里生成的所有值都存起来,以矩阵的形式打印出来
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多