2009-02-05 2 views
24

Я хочу сделать что-то вроде String.Format("[{0}, {1}, {2}]", 1, 2, 3), который возвращает:Строка форматирования в Python

[1, 2, 3] 

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

+0

в [питона 3,6 +] (HTTPS : //docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals) вы можете использовать 'f '[{1}, {2}, {3}]" ' – Soorena

ответ

55

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

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

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

>>> "[{0}, {1}, {2}]".format(1, 2, 3) 
[1, 2, 3] 
+16

Также в Python 3.1 нет необходимости указывать ординалы. "[{}, {}, {}]". format (1, 2, 3) –

+7

Ординалы также необязательны в Python 2.7 –

+0

У вас есть ссылка на документы, в которых происходит сглаживание% форматирования в Python 3.0+ ? Это все еще в 3.3 - см. Http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting - и хотя документы говорят, что более новый метод 'format' является предпочтительным, t утверждают, что оператор% постепенно прекращается. – Day

2

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

foo = "Hello" 
bar = "world" 
baz = 2 
print "%s, %s number %d" % (foo, bar, baz) 
+0

Спасибо, что означает последний%? Также вам нужно написать тип способа печати, как на C++ с помощью s, d, f и т. Д.? –

+0

Я расскажу вам об ответе DNS, который выше: http://stackoverflow.com/questions/517355/string-formatting-in-python/517471#517471 – JosefAssad

17

Вы ищете строки форматирования, которая в питона основана на функция Sprintf в С.

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

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

+1

Спасибо, что означает последний%? Также вам нужно написать тип способа печати, как на C++ с помощью s, d, f и т. Д.? –

+0

Да. int =% d, float =% f (и есть точность, поэтому посмотрите на ссылку) –

25

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


автоматическая печать довольно

Используйте Пайтона:

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

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

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

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

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) 
+4

Для полноты, используя «классический» стиль, вы также можете: «печатать» [% (один) i,% (два) i,% (три) i] "% {'three': 3, 'two' : 2, 'один': 1} ' – DrAl

4

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

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

(wo rks с python 2.7 и python 3.1)

0

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

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

'[1, 2, 3]' 

Это прогуливать для списка проще строк

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

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

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

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]" 
Смежные вопросы