2015-07-05 3 views
-1

У меня есть список чисел, которые являются выходными данными операции OCR. Есть 40 intergers, я хочу напечатать их в виде матрицы (8x5). Может ли кто-нибудь мне помочь, как это сделать в Python 2.7? Я не хочу вводить элементы вручную .. список элементов генерируется с использованием циклов, я просто хочу отображать их в виде матрицы 8x5.Как сохранить и распечатать список чисел в матричной форме (python)

спасибо

ответ

1

Просто используйте 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])) 

См. Пример: https://ideone.com/yOk1I5

+0

Спасибо за ответ, но я не хочу, чтобы ввести элементы вручную, мои элементы сгенерированные образуют эту функцию - pytesseract.image_to_string (im), я хочу сохранить результат этого в одном массиве ... и затем напечатать то же самое. –

+0

@yashWanthShetty 'image_to_string()' возвращает строку, не так ли? Поэтому вам нужно преобразовать его в список, просто используя 'my_list = list (pytesseract.image_to_string (im))'. Если строка содержит 40 символов, вы можете использовать код, который я предоставил, чтобы преобразовать его в матрицу 8x5. – Delgan

+0

Это почти сработало, но я могу отображать только последний элемент ... все остальное перезаписано и «my_list» содержит только последний элемент. Как это решить? –

0

Другое решение:

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 
0

Добро пожаловать в 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 
Смежные вопросы