【发布时间】:2015-09-22 19:14:00
【问题描述】:
我有一个数字列表,它们是 OCR 操作的输出数据。 有 40 个整数,我想以矩阵(8x5)的形式打印它们。 谁能帮助我如何在 Python 2.7 中做到这一点? 我不想手动输入元素。元素列表是使用 for 循环生成的,我只想以 8x5 矩阵的形式显示它们。
谢谢
【问题讨论】:
我有一个数字列表,它们是 OCR 操作的输出数据。 有 40 个整数,我想以矩阵(8x5)的形式打印它们。 谁能帮助我如何在 Python 2.7 中做到这一点? 我不想手动输入元素。元素列表是使用 for 循环生成的,我只想以 8x5 矩阵的形式显示它们。
谢谢
【问题讨论】:
欢迎来到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
【讨论】:
另一种解决方案:
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
【讨论】:
只需使用list comprehension 和range() 函数。
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]))
【讨论】:
image_to_string() 正在返回一个字符串,对吧?因此,您必须使用my_list = list(pytesseract.image_to_string(im)) 将其转换为列表。如果字符串包含 40 个字符,那么您可以使用我提供的代码将其转换为 8x5 矩阵。
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) #我要把这里生成的所有值都存起来,以矩阵的形式打印出来