2009-10-22 3 views
1

Я использую эту простую функцию:Pythonic способ напечатать таблицу

def print_players(players): 
    tot = 1 
    for p in players: 
     print '%2d: %15s \t (%d|%d) \t was: %s' % (tot, p['nick'], p['x'], p['y'], p['oldnick']) 
     tot += 1 

, и я не уверен, если предположить, заусеницы не более 15 символов.
Я бы хотел, чтобы каждый «столбец» выровнялся, есть ли какой-то синтаксический сахар, позволяющий мне делать то же самое, но оставляя столбцы никнеймов выровненными слева, а не выровненными по правому краю, без нарушения столбца справа?

Эквивалент, уродливее, код будет:

def print_players(players): 
    tot = 1 
    for p in players: 
     print '%2d: %s \t (%d|%d) \t was: %s' % (tot, p['nick']+' '*(15-len(p['nick'])), p['x'], p['y'], p['oldnick']) 
     tot += 1 

Спасибо всем, вот окончательная версия:

def print_players(players): 
    for tot, p in enumerate(players, start=1): 
     print '%2d:'%tot, '%(nick)-12s (%(x)d|%(y)d) \t was %(oldnick)s'%p 

ответ

2

Видя, что p кажется ДИКТ, как насчет:

print '%2d' % tot + ': %(nick)-15s \t (%(x)d|%(y)d) \t was: %(oldnick)15s' % p 
4

для выравнивания влево вместо правого выравнивания используйте %-15s вместо от %15s.

3

Или, если вы используете Python 2.6 вы можете использовать format метод строки:

Это определяет словарь значений, и использует их для dipslay:

>>> values = {'total':93, 'name':'john', 'x':33, 'y':993, 'oldname':'rodger'} 
>>> '{total:2}: {name:15} \t ({x}|{y}\t was: {oldname}'.format(**values) 
'93: john   \t (33|993\t was: rodger' 
+0

Что означает '** значения'? Я видел '**' только в объявлении параметров (объявление функции/метода). –

+1

@Andrea: он передает пары ключ/значение словаря в виде ряда именованных аргументов функции. Итак, если 'd = {'a': 1, 'b': 2}', то 'f (** d)' эквивалентно 'f (a = 1, b = 1)'. – Stephan202

+0

Я этого не знал, спасибо вам большое! –

4

Немного не по теме, но вы можете избежать выполнения явного добавления на tot с использованием enumerate:

for tot, p in enumerate(players, start=1): 
    print '...'