Formato de cadena en Python


Quiero hacer algo como String.Format("[{0}, {1}, {2}]", 1, 2, 3) que devuelve:

[1, 2, 3]

¿Cómo hago esto en Python?

Author: Mateusz Piotrowski, 2009-02-05

9 answers

Las respuestas anteriores han utilizado % formatting, que se está eliminando gradualmente en Python 3.0+. Suponiendo que esté utilizando Python 2.6+, aquí se describe un sistema de formato más preparado para el futuro:

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

Aunque también hay características más avanzadas, la forma más simple termina pareciéndose mucho a lo que escribiste:

>>> "[{0}, {1}, {2}]".format(1, 2, 3)
[1, 2, 3]
 58
Author: DNS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-05 19:16:29

Puedes hacerlo de tres maneras:


Utilice la impresión bonita automática 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 cadena 'clásicas' (printf de ala 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 que el % se utiliza como el operador modulo(resto) para expresiones aritméticas.)

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

Nota si usamos nuestro variable predefinida, necesitaremos convertirla en una tupla para hacer esto:

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

Utilice el formato de cadena Python 3. Esto todavía está disponible en versiones anteriores (a partir de la 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 supuesto que los he puesto en orden inverso.

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

Nótese que los nombres 'uno' ,'dos' y 'tres' pueden ser lo que tenga sentido.)

print "[{one}, {two}, {three}]".format(three=3, two=2, one=1)
 26
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-21 01:47:32

Está buscando el formato de cadena, que en python se basa en la función sprintf en C.

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

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

 17
Author: chills42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-17 18:13:35

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

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

(funciona desde python 2.7 y python 3.1)

 5
Author: Riccardo Galli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 00:05:15

No te has formulado de manera muy encomiable, pero me aventuraré a adivinar que esto es lo que estás buscando:

foo = "Hello"
bar = "world"
baz = 2
print "%s, %s number %d" % (foo, bar, baz)
 2
Author: JosefAssad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-05 18:56:15

Creo que falta esta combinación: P

"[{0}, {1}, {2}]".format(*[1, 2, 3])
 1
Author: radeklos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-26 16:18:20

Tienes muchas soluciones:)

Manera simple (estilo C):

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

Use str.formato()

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

Use str.Plantilla()

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

Puedes leer PEP 3101 Formatting Formato de cadena avanzado

 1
Author: RaminNietzsche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-12 11:49:34

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

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

'[1, 2, 3]'

Es mouch simplier para la lista de cadenas

>>> '[{0}]'.format(', '.join(['a','b','c']))
'[a, b, c]'
 0
Author: Yupa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-10 13:03:32

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

Ahora puedes 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]"
 0
Author: toofarsideways,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-03 15:32:01