2009-02-05 14 views
24

chcę zrobić coś jak String.Format("[{0}, {1}, {2}]", 1, 2, 3) która zwraca:String formatowania w Pythonie

[1, 2, 3] 

Jak to zrobić w Pythonie?

+0

w [Python 3.6 +] (https : //docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals) możesz użyć 'f" [{1}, {2}, {3}] "' – Soorena

Odpowiedz

55

dotychczasowe odpowiedzi mogą korzystać Formatowanie d%, które jest stopniowo wycofywane w Pythonie 3.0+. Zakładając, że używasz Python 2.6+, system bardziej formatowanie przyszłościowe opisana jest tutaj:

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

Mimo że istnieją bardziej zaawansowane funkcje, jak również, najprostsza forma kończy się patrząc bardzo blisko tego, co napisałeś :

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

Ponadto, w Pythonie 3.1, nie ma potrzeby określania liczby porządkowej. "[{}, {}, {}]". format (1, 2, 3) –

+7

Rozkazy są również opcjonalne w Pythonie 2.7 –

+0

Czy masz referencje dokumentujące, że formatowanie% jest stopniowo wycofywane w Pythonie 3.0+ ? Wciąż jest w wersji 3.3 - zobacz http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting - i chociaż dokumenty mówią, że nowsza metoda 'format' jest preferowana, to doesn doesn ' t powiedzieć, że operator% jest wycofywany. – Day

2

Nie formułuje się bardzo pochlebnie, ale będę zgadywać to jest to, czego szukasz:

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

Dzięki, co oznacza ostatni%? Czy musisz napisać, jaki powinien być sposób drukowania w C++ z s, d, f itd.? –

+0

Skieruję cię do odpowiedzi DNS powyżej, która jest lepsza: http://stackoverflow.com/questions/517355/string-formatting-in-python/517471#517471 – JosefAssad

17

Patrzysz do formatowania łańcucha, co w Pythonie jest w oparciu o funkcja sprintf w C

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

Pełną wygląd odniesienia tutaj: http://docs.python.org/library/stdtypes.html#string-formatting

+1

Dzięki, co oznacza ostatni%? Czy musisz napisać, jaki powinien być sposób drukowania w C++ z s, d, f itd.? –

+0

Tak. int =% d, float =% f (i jest precyzja, więc spójrz na odniesienie) –

25

można to zrobić na trzy sposoby:


automatyczny druk dość

Skorzystaj Pythona:

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

Pokazuje to samo ze zmienną:

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

użyć 'klasyczne' podstawienia strunowe (ALA printf z C). Zauważ tutaj różne znaczenia% jako specyfikator formatu łańcucha, a%, aby zastosować listę (właściwie krotkę) do ciągu formatowania. (. I zanotuj% służy jako modulo (reszta) operatora dla wyrażeń arytmetycznych)

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

Uwaga jeśli używamy naszego predefiniowanych zmiennych, musimy przekształcić go w krotce w tym celu:

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

Zastosowanie Python formatowanie 3 ciąg. Jest to nadal dostępne we wcześniejszych wersjach (od wersji 2.6), ale jest to "nowy" sposób na wykonanie go w Py 3. Uwaga: możesz użyć argumentów pozycyjnych (porządkowych) lub nazwanych argumentów (do cholery, które umieściłem) je w odwrotnej kolejności.

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

Uwaga Nazwy „jeden”, „dwa” i „trzy” może być cokolwiek ma sens.)

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

Dla kompletności, używając "klasycznego" stylu, możesz również: "wydrukować" [% (jeden) i,% (dwa) i,% (trzy) i] "% {'trzy': 3," dwa " : 2, "jeden": 1} " – DrAl

4

Aby wydrukować elementy kolejno używać {} bez podania indeks

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

(wyd. rks od python 2.7 i python 3.1)

0

Jeśli nie wiesz, jak wiele elementów są na liście, to aproach jest najbardziej uniwersalny

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

'[1, 2, 3]' 

Jest Mouch prostsza do listy ciągów

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

myślę, że ta kombinacja brakuje: P

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

PEP 498, który wylądował w python 3.6 dodano interpolację ciągów literowych, która jest zasadniczo skróconą formą format.

można teraz zrobić:

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

Wspólne innych zastosowań znajdę użyteczne są:

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

która będzie produkować:

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