Вопрос по python – Форматирование вывода в виде таблицы

-1

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

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

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

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

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

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

How do I format output as a table in Python using [preferably] one line of code?

Я включил пример выходных данных в табличный вывод, который я ищу. A T
Строка заголовка, строка левого столбца. Добавьте число вместе к соответствующему (по положению ячейки). Покажите результаты в таблице, как показано выше. A T
Ваш пример ввода не скомпилирован для меня (Python 2.7) - вы пропустили хотя бы двоеточие в конце вашегоdefсреди других ошибок. Li-aung Yip
Из примера не ясно, что именно вы ищете. Что представляют собой точки? Какой шаблон используется в таблице? Josiah
Что вы подразумеваете под "форматом как таблицей"? Можете ли вы привести пример вида форматирования, который вам нравится? Li-aung Yip

Ваш Ответ

2   ответа
1

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]
В самом деле, может, я только что сменил его на обычное, чего я на самом деле не знал, так что спасибо, что научили меня этому.
@AT: Я полагаю, что мы оба прочитали ваш вопрос как "как мне отформатироватьspecific input отображается как таблица? & quot; Если вы хотите задать общий вопрос, вам нужно указать, что требуется общее решение.
@A T Он будет работать с любым типом данных operator.add будет иметь желаемый эффект. Так что нет, наверное, не на струнах.
Извините, забыл упомянуть, что мне это нужно и для строк. Числа как результаты, например сравнивая g & # xF6; del нумерацию символов. Будет ли это работать для этого? A T
я верю(str(j)+"".join([' ' for _ in range(2-len(str(j)))])) также можно сказатьstr.ljust(3).
4

data = [
    ['A','a','1'],
    ['B','b','2'],
    ['C','c','3'],
    ['D','d','4']
]

# Desired output:
#
#   A B C D
# 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))]))

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

  A B C D
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.join()s собрать все подстроки вместе.

Похожие вопросы