2016-08-24 2 views
0

Скажем, у меня есть массив чисел, гдеPython - номера печати с форматом расстояния

list = [(4, 3, 7, 23),(17, 4021, 4, 92)] 

и я хочу, чтобы напечатать числа в таким образом, что вывод выглядит примерно так:

[ 4 | 3 | 7 | 23 ] 
[ 17 | 4021 | 4 | 92 ] 

Если числа как можно более центрированы и что между «|» имеется достаточно места, чтобы иметь 4-значное число с двумя пробелами с обеих сторон.

Как мне это сделать?

спасибо.

+0

Вызов вашей переменной 'list' может быть не очень хорошо – boardrider

ответ

2

Вы также можете использовать сторонние поставщики, такие как PrettyTable или texttable. Пример использования texttable:

import texttable 

l = [(4, 3, 7, 23),(17, 4021, 4, 92)] 

table = texttable.Texttable() 
# table.set_chars(["", "|", "", ""]) 
table.add_rows(l) 

print(table.draw()) 

бы произвести:

+----+------+---+----+ 
| 4 | 3 | 7 | 23 | 
+====+======+===+====+ 
| 17 | 4021 | 4 | 92 | 
+----+------+---+----+ 
0

Здесь:

list = [[4, 3, 7, 23],[17, 4021, 4, 92]] 

for sublist in list: 
    output = "[" 
    for index, x in enumerate(sublist): 
     output +='{:^6}'.format(x) 
     if index != len(sublist)-1: 
      output += '|' 
    output +=']' 
    print output 

Выход:

[ 4 | 3 | 7 | 23 ] 
[ 17 | 4021 | 4 | 92 ] 
1

str.center может сделать вещи проще.

for i in list: 
    print '[ ' + ' | '.join([str(j).center(4) for j in i]) + ' ]' 

Выход:

[ 4 | 3 | 7 | 23 ] 
[ 17 | 4021 | 4 | 92 ] 

В случае, если вам нужно альтернативное решение, вы можете использовать str.format:

for i in list: 
    print '[ ' + ' | '.join(["{:^4}".format(j) for j in i]) + ' ]' 

Выход:

[ 4 | 3 | 7 | 23 ] 
[ 17 | 4021 | 4 | 92 ] 
+0

Вместо жесткого кодирования _4, _ вы можете сделать: '_list = [(4, 3, 7, 23), (17, 4021, 4, 92)]; lst = [len (str (x)) для i в _list для x в i]; _width = max (lst); ' – boardrider

Смежные вопросы