Вопрос-Ответ

String formatting in Python [duplicate]

Форматирование строк в Python

Я хочу сделать что-то вроде String.Format("[{0}, {1}, {2}]", 1, 2, 3) которое возвращает:

[1, 2, 3]

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

Переведено автоматически
Ответ 1

В предыдущих ответах использовалось форматирование %, которое постепенно отменяется в Python 3.0+. Предполагая, что вы используете Python 2.6 +, здесь описана более перспективная система форматирования:

http://docs.python.org/library/string.html#formatstrings

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

>>> "[{0}, {1}, {2}]".format(1, 2, 3)
[1, 2, 3]
Ответ 2

Вы можете сделать это тремя способами:


Используйте автоматическую красивую печать в Python:

print([1, 2, 3])   # Prints [1, 2, 3]

Показывает то же самое с переменной:

numberList = [1, 2]
numberList.append(3)
print(numberList) # Prints [1, 2, 3]

Используйте "классические" замены строк (ala C's printf). Обратите внимание на различные значения здесь % как спецификатора формата строки и % для применения списка (фактически кортежа) к строке форматирования. (И обратите внимание, что % используется в качестве оператора по модулю (остатка) для арифметических выражений.)

print("[%i, %i, %i]" % (1, 2, 3))

Примечание: если мы используем нашу предопределенную переменную, нам нужно будет преобразовать ее в кортеж, чтобы сделать это:

print("[%i, %i, %i]" % tuple(numberList))

Используйте форматирование строк в Python 3. Это все еще доступно в более ранних версиях (начиная с 2.6), но является "новым" способом сделать это в Py 3. Обратите внимание, что вы можете использовать либо позиционные (порядковые) аргументы, либо именованные аргументы (на всякий случай я расположил их в обратном порядке.

print("[{0}, {1}, {2}]".format(1, 2, 3))

Обратите внимание, что имена "один", "два" и "три" могут быть любыми, имеющими смысл.)

print("[{one}, {two}, {three}]".format(three=3, two=2, one=1))
Ответ 3

Вы ищете форматирование строк, которое в python основано на функции sprintf в C.

print "[%s, %s, %s]" % (1, 2, 3)

Полный справочник смотрите здесь:
http://docs.python.org/library/stdtypes.html#string-formatting

Ответ 4

PEP 498, который попал в python 3.6 добавлена литеральная интерполяция строк, которая в основном является сокращенной формой format.

Теперь вы можете сделать:

f"[{1}, {2}, {3}]"

Другие распространенные применения, которые я нахожу полезными, следующие:

pi = 3.141592653589793
today = datetime(year=2018, month=2, day=3)

num_2 = 2 # Drop assigned values in
num_3 = "3" # Call repr(), or it's shortened form !r
padding = 5 # Control prefix padding
precision = 3 # and precision for printing


f"""[{1},
{num_2},
{num_3!r},
{pi:{padding}.{precision}},
{today:%B %d, %Y}]"""

Которое приведет к:

"[1,\n     2,\n     '3',\n      3.14,\n     February 03, 2018]"
python python-3.x string