Форматирование строк в Python - PullRequest
29 голосов
/ 05 февраля 2009

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

[1, 2, 3]

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

Ответы [ 9 ]

59 голосов
/ 05 февраля 2009

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

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

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

>>> "[{0}, {1}, {2}]".format(1, 2, 3)
[1, 2, 3]
27 голосов
/ 10 марта 2009

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


Использовать автоматическую красивую печать 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)
18 голосов
/ 05 февраля 2009

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

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

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

5 голосов
/ 10 июля 2012

Для последовательной печати элементов используйте {} без указания индекса

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

(работает с python 2.7 и python 3.1)

2 голосов
/ 05 февраля 2009

Вы сформулировали себя не очень похвально, но я рискну предположить, что это то, что вы ищете:

foo = "Hello"
bar = "world"
baz = 2
print "%s, %s number %d" % (foo, bar, baz)
1 голос
/ 03 февраля 2018

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]"
1 голос
/ 12 апреля 2017

У вас есть много решений:)

простой способ (стиль C) :

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

Использовать str.format ()

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

Использование str.Template ()

s = Template('[$a, $b, $c]')
print(s.substitute(a = 1, b = 2, c = 3))

Вы можете прочитать PEP 3101 - Расширенное форматирование строк

1 голос
/ 26 февраля 2015

Я думаю, что эта комбинация отсутствует: P

"[{0}, {1}, {2}]".format(*[1, 2, 3])
0 голосов
/ 10 октября 2013

Если вы не знаете, сколько предметов в списке, этот подход самый универсальный

>>> '[{0}]'.format(', '.join([str(i) for i in [1,2,3]]))

'[1, 2, 3]'

Это проще для списка строк

>>> '[{0}]'.format(', '.join(['a','b','c']))
'[a, b, c]'
...