LINUX.ORG.RU

[Python] Форматированный вывод списка

 


0

1

Попробовал сделать форматированный вывод следующим образом:

>>> print "%1.3f %2i" % [0.123, 123]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: float argument required
1й вопрос: то что он ожидает тип float, а не list я прочитал, но почему тогда интерпретатор с успехом съедает кортеж(tuple), который тоже является последовательностью:

>>> print "%1.3f %2i" % tuple([0.123, 123])
0.123 123

2й вопрос: насколько такое решение для сабжевой задачи является удачным? Есть ли более православный вариант?


Не совсем. Если параметр форматирования - кортеж, то он поставляется поэлементно. Иначе подставляется весь объект.

Есть

print «%1.3f %2i» % (0.123, 123)

или через dict

namezys ★★★★
()

> Есть ли более православный вариант?

Есть: print «{0:1.3f} {1:2n}».format(0.123, 123)

anonymous
()
Ответ на: комментарий от namezys

>print «%1.3f %2i» % (0.123, 123)

этот вариант подойдет только, если изначально моя последовательность была сформирована в виде кортежа, т.е.
output=(0.123,123)
если же был список
output=[0.123,123] - то его нужно или как то преобразовывать (то что я предложил) или выводить поэлементно:
print «%1.3f %2i» % (output[0], output[1]), что совсем неудобно, если он будет достаточно большой. Я потому и спросил именно о списке (list)

K-Vrat
() автор топика

Cписки действительно надо приводить к кортежам при форматировании, но это несложно.

Если список длинный и нужно вывести его элементы через пробел, то решений много, напр. (для некоторого списка L):

print ' '.join(map( str, L ))

print '%s '*len(L)%tuple(L)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Да, можно и через дикт, но в данном случае это извращение;-)

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.