Подтвердить что ты не робот

Динамически вычисленное нулевое заполнение в строке формата в python

Итак, я знаю, что "%02d to %02d"%(i, j) в Python будет иметь ноль pad i и j.

Но мне было интересно, есть ли какой-либо способ динамически нуля пэда в строке формата (у меня есть список чисел, и я хочу, чтобы размер нулевой площадки был равен самому длинному числу в этом списке).

Я знаю, что я мог бы использовать zfill, но я надеялся, что смогу сделать все это в строке формата.

4b9b3361

Ответ 1

Вместо этого используйте str.format() метод форматирования строк:

'{number:0{width}d}'.format(width=2, number=4)

Демо:

>>> '{number:0{width}d}'.format(width=2, number=4)
'04'
>>> '{number:0{width}d}'.format(width=8, number=4)
'00000004'

Спецификация форматирования str.format() позволяет использовать несколько проходов, где поля замены могут заполнять параметры для спецификаций форматирования.

В приведенном выше примере спецификация ширины прошивки с жестким кодированием будет выглядеть так:

'{:02d}'.format(4)

или

'{number:02d}'.format(number=4)

с именованным параметром. Я просто заменил спецификатор ширины 2 на другое поле замены.

Чтобы получить тот же эффект при форматировании строки % в старом стиле, вам понадобится использовать символ ширины *:

'%0*d' % (width, number)

но это можно использовать только с кортежем значений (форматирование словарей не поддерживается) и применяется только к ширине поля; другие параметры в форматировании не поддерживают динамические параметры.

Ответ 2

Да, возможно

>>> print "%0*d" % (5, 4)
00004
>>> print "%0*d" % (10, 4)
0000000004