wake-up-neo.com

String-Formatierung in Python

Ich möchte etwas wie String.Format("[{0}, {1}, {2}]", 1, 2, 3) machen, das zurückgibt:

[1, 2, 3]

Wie mache ich das in Python?

29
Joan Venge

In den vorherigen Antworten wurde die Formatierung% verwendet, die in Python 3.0 und älter ausläuft. Vorausgesetzt, Sie verwenden Python 2.6+, wird hier ein zukunftsfähigeres Formatierungssystem beschrieben:

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

Obwohl es auch erweiterte Funktionen gibt, sieht die einfachste Form sehr nahe an dem, was Sie geschrieben haben:

>>> "[{0}, {1}, {2}]".format(1, 2, 3)
[1, 2, 3]
59
DNS

Sie haben drei Möglichkeiten:


Verwenden Sie den automatischen Druck von Python:

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

Dasselbe mit einer Variablen anzeigen:

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

Verwenden Sie "klassische" Zeichenkettenersetzungen (ala C's printf). Beachten Sie die unterschiedlichen Bedeutungen von% als Zeichenfolgenbezeichner und die%, um die Liste (eigentlich ein Tuple) auf die Formatierungszeichenfolge anzuwenden. (Beachten Sie, dass% als Modulo-Operator (Rest) für arithmetische Ausdrücke verwendet wird.)

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

Wenn wir unsere vordefinierte Variable verwenden, müssen wir sie in ein Tuple umwandeln, um dies zu tun:

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

Verwenden Sie die Python 3-String-Formatierung. Dies ist in früheren Versionen (ab 2.6) noch verfügbar, ist aber in Py 3 die 'neue' Methode. Beachten Sie, dass Sie entweder positionelle (ordinal) Argumente oder benannte Argumente verwenden können (für den Teufel habe ich das gestellt sie in umgekehrter Reihenfolge. 

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

Beachten Sie, dass die Namen "Eins", "Zwei" und "Drei" den Sinn haben können.)

print "[{one}, {two}, {three}]".format(three=3, two=2, one=1)
27
Peter

Sie suchen nach einer String-Formatierung, die in Python auf der Sprintf-Funktion in C basiert.

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

Eine vollständige Referenz finden Sie hier: http://docs.python.org/library/stdtypes.html#string-formatting

18
chills42

Um Elemente nacheinander zu drucken, verwenden Sie {}, ohne den Index anzugeben

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

(funktioniert seit Python 2.7 und Python 3.1)

5
Riccardo Galli

Sie haben sich nicht sehr lobenswert formuliert, aber ich wage eine Vermutung, wonach Sie suchen:

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

Sie haben viele Lösungen :)

einfacher Weg (C-Stil):

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

Verwenden Sie str.format ()

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

Verwenden Sie str.Template ()

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

Sie können PEP 3101 - Erweiterte String-Formatierung lesen. _

1
RaminNietzsche

Ich denke, dass diese Kombination fehlt: P

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

PEP 498, das in python 3.6 gelandet ist, fügte die Interpolation von Zeichenketten hinzu, was im Grunde eine verkürzte Form von format ist.

Sie können jetzt Folgendes tun:

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

Häufige andere Anwendungen, die ich nützlich finde, sind:

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}]"""

Was wird produzieren:

"[1,\n     2,\n     '3',\n      3.14,\n     February 03, 2018]"
1
toofarsideways

Wenn Sie nicht wissen, wie viele Elemente in der Liste enthalten sind, ist dieser Ansatz der universellste

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

'[1, 2, 3]'

Es ist viel einfacher für eine Liste von Strings

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