Используйте форматированную строку для разделения групп цифр

Учитывая число вроде 12345678910, я хочу вывести number id 123.456.789-10.

Я пробовал это:

print('number id {0:1.3}.{0:1.3}.{0:1.3}-{0:1.3}'.format("12345678910"))

но результат number id 123.123.123-123. Как это сделать правильно?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

number = "12345678910"
print(
    'number id {0}.{1}.{2}-{3}'.format(
        *[number[i:i+3] for i in range(0,len(number), 3)]
    )
)
#number id 123.456.789-10.

Есть несколько проблем с вашим кодом. Сначала первое число в "{0...}" относится к позиционному аргументу в функции format(). В вашем случае вы использовали все 0, которые относятся только к первому аргументу. Вот почему одна и та же подстрока повторялась снова и снова. (Обратите внимание, как я изменил его на {0}.{1}...{3}.)

Я передаю *[number[i:i+3] for i in range(0,len(number), 3)] функции форматирования, которая просто разбивает вашу строку на части по 3.

print([number[i:i+3] for i in range(0,len(number), 3)])
#['123', '456', '789', '10']

Оператор * выполняет распаковка аргументов, который передает элементы списка в format().


Обновлять:

Как @ user2357112 упоминается в комментариях, в этом случае вам на самом деле ничего не нужно внутри фигурных скобок. Просто используйте {} для обозначения заполнителей.

print(
    'number id {}.{}.{}-{}'.format(
        *[number[i:i+3] for i in range(0,len(number), 3)]
    )
)

Другие вопросы по теме