Форматирование вывода в виде таблицы

Пример ввода:

[('b', 'c', 4), ('l', 'r', 5), ('i', 'a', 6), ('c', 't', 7), ('a', '$', 8), ('n', '$', 9)] 

[0] содержит вертикальный заголовок, [1] содержит горизонтальный заголовок.

  • расширенное форматирование строк и строк шаблонов
  • Лучший способ форматировать целое число как строку с ведущими нулями?
  • Параметры форматирования строк: плюсы и минусы
  • Форматирование чисел в строки в Python
  • Как мне преобразовать дату и время python в строку с датой чтения?
  • Python: форматирование выходной строки, выравнивание по правому краю
  • Пример вывода:

      crat $ $ b 4 l 5 i 6 c 7 a 8 n 9 

    Примечание: при наличии достаточного количества кортежей вся таблица может быть заполнена: P

    Как форматировать вывод в виде таблицы в Python, используя [предпочтительно] одну строку кода?

  • Как мне преобразовать дату и время python в строку с датой чтения?
  • В чем разница между% s и% d в форматировании строки Python?
  • Как выровнять строку фиксированной ширины?
  • Отображение десятичной цифры в научной нотации
  • Форматирование условной строки Python
  • Преобразуйте или неформатируйте строку в переменные (например, format (), но наоборот) в Python
  • 2 Solutions collect form web for “Форматирование вывода в виде таблицы”

    Вот ответ на ваш пересмотренный вопрос:

     data = [ ['A','a','1'], ['B','b','2'], ['C','c','3'], ['D','d','4'] ] # Desired output: # # ABCD # a 1 # b 2 # c 3 # d 4 # Check data consists of colname, rowname, value triples assert all([3 == len(row) for row in data]) # Convert all data to strings data = [ [str(c) for c in r] for r in data] # Check all data is one character wide assert all([1 == len(s) for s in r for r in data]) #============================================================================ # Verbose version #============================================================================ col_names, row_names, values = zip(*data) # Transpose header_line = ' ' + ' '.join(col_names) row_lines = [] for idx, (row_name, value) in enumerate(zip(row_names,values)): # Use ' '*n to get 2n consecutive spaces. row_line = row_name + ' ' + ' '*idx + value row_lines.append(row_line) print header_line for r in row_lines: print (r) 

    Или, если это слишком долго для вас, попробуйте следующее:

     cs, rs, vs = zip(*data) print ('\n'.join([' '+' '.join(cs)] + [r+' '+' '*i+v for i,(r,v) in enumerate(zip(rs,vs))])) 

    Оба имеют следующий выход:

      ABCD a 1 b 2 c 3 d 4 

    Вот ядро ​​того, что вы хотите (нет строки чтения или столбца заголовка)

     >>> print('\n'.join([ ''.join([str(i+j+2).rjust(3) for i in range(10)]) for j in range(10) ])) 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10 11 12 13 14 15 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 17 9 10 11 12 13 14 15 16 17 18 10 11 12 13 14 15 16 17 18 19 11 12 13 14 15 16 17 18 19 20 

    Он использует вложенное понимание списка над i и j для генерации чисел i+j , затем str.rjust() для str.rjust() всех полей длиной до трех символов и, наконец, некоторого str.join() s для объединения всех подстрок.

    Предполагая python 2.x, он немного уродлив, но он функциональный:

     import operator from functools import partial x = range(1,11) y = range(0,11) multtable = [y]+[[i]+map(partial(operator.add,i),y[1:]) for i in x] for i in multtable: for j in i: print str(j).rjust(3), print 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 2 3 4 5 6 7 8 9 10 11 12 3 4 5 6 7 8 9 10 11 12 13 4 5 6 7 8 9 10 11 12 13 14 5 6 7 8 9 10 11 12 13 14 15 6 7 8 9 10 11 12 13 14 15 16 7 8 9 10 11 12 13 14 15 16 17 8 9 10 11 12 13 14 15 16 17 18 9 10 11 12 13 14 15 16 17 18 19 10 11 12 13 14 15 16 17 18 19 20 

    Ваша проблема настолько прочная, что сложно сделать настоящий общий пример.

    Важная часть здесь, тем не менее, является той частью, которая делает таблицу более ритуальной, чем фактическая печать:

     [map(partial(operator.add,i),y[1:]) for i in x] 
    Python - лучший язык программирования в мире.