2009-02-05 23 views
24

quiero hacer algo como String.Format("[{0}, {1}, {2}]", 1, 2, 3) que devuelve:formato de cadenas en Python

[1, 2, 3] 

¿Cómo puedo hacer esto en Python?

+0

en [Python 3.6 +] (https : //docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals) puede usar 'f" [{1}, {2}, {3}] "' – Soorena

Respuesta

55

las respuestas anteriores tienen uso El formato d%, que se está eliminando progresivamente en Python 3.0+. Suponiendo que usted está utilizando Python 2.6+, un sistema de formato más preparada para el futuro se describe aquí:

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

Aunque existen características más avanzadas, así, la forma más simple termina buscando muy cerca de lo que ha escrito :

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

Además, en Python 3.1, no hay necesidad de especificar los ordinales. "[{}, {}, {}]". format (1, 2, 3) –

+7

Los ordinales también son opcionales en Python 2.7 –

+0

¿Tiene una referencia que documenta que el% de formateo se está eliminando gradualmente en Python 3.0+ ? Todavía está en 3.3 - ver http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting - y mientras los documentos dicen que el método más nuevo de 'format' es preferido, no lo hace d decir que el operador% se está eliminando. – Day

2

No ha formulado a sí mismo muy encomiable, pero voy a aventurar una conjetura esto es lo que está buscando:

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

Gracias, ¿qué significa el último%? ¿También tienes que escribir el tipo de la forma en que debería imprimirse, como en C++ con s, d, f, etc.? –

+0

Lo remitiré a la respuesta de DNS anterior que es superior: http://stackoverflow.com/questions/517355/string-formatting-in-python/517471#517471 – JosefAssad

17

Usted está buscando un formato de cadenas, que en Python se basa en la función sprintf en C.

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

Para una mirada referencia completa aquí: http://docs.python.org/library/stdtypes.html#string-formatting

+1

Gracias, ¿qué significa el último%? ¿También tienes que escribir el tipo de la forma en que debería imprimirse, como en C++ con s, d, f, etc.? –

+0

Sí. int =% d, float =% f (y hay precisión, así que mira la referencia) –

25

usted puede hacerlo de tres maneras:


impresión bastante automática de

uso de Python:

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

Mostrando lo mismo con una variable:

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

Use sustituciones de cadenas 'clásicas' (ALA printf de C). Tenga en cuenta los diferentes significados aquí de% como el especificador de formato de cadena, y el% para aplicar la lista (en realidad una tupla) a la cadena de formato. (. Y tenga en cuenta el% se utiliza como el operador de módulo (resto) para expresiones aritméticas)

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

Nota si usamos nuestra variable predefinida, tendremos que convertirlo en una tupla de hacer esto:

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

uso de Python 3 formato cadena. Esto todavía está disponible en versiones anteriores (desde 2.6), pero es la "nueva" forma de hacerlo en Py 3. Tenga en cuenta que puede usar argumentos posicionales (ordinales) o argumentos con nombre (por lo que he dicho en orden inverso.

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

Nota los nombres de 'uno', 'dos' y 'tres' pueden ser cualquier cosa que tenga sentido.)

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

Para completar, usando el estilo "clásico", también puede hacer: 'imprimir" [% (uno) i,% (dos) i,% (tres) i] "% {'tres': 3, 'dos' : 2, 'uno': 1} ' – DrAl

4

Para imprimir elementos utilizan secuencialmente {} sin especificar el índice

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

(wo rks desde python 2.7 y python 3.1)

0

Si usted no sabe cuántos elementos hay en la lista, este abordaje es el más universal

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

'[1, 2, 3]' 

Es más simple para Mouch lista de cadenas

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

creo que esta combinación es que falta: P

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

PEP 498 que aterrizó en python 3.6 agregó literalmente la interpolación de cadena, que es básicamente una forma abreviada de format.

Ahora puede hacer:

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

otros usos comunes que encuentro útiles son:

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

que producirá:

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