Construyo una cadena s
en Python 2.6.5 que tendrá un número variable de %s
tokens, que coinciden con el número de entradas en la lista x
. Necesito escribir una cadena formateada. Lo siguiente no funciona, pero indica lo que estoy tratando de hacer. En este ejemplo, hay tres %s
tokens y la lista tiene tres entradas.
s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)
Me gustaría que la cadena de salida sea:
1 BLAH 2 FOO 3 BAR
python
string
list
formatting
string-formatting
SabreWolfy
fuente
fuente
(x)
es lo mismo quex
. Poner un solo token entre corchetes no tiene sentido en Python. Por lo general, coloca corchetesfoo = (bar, )
para facilitar la lectura, perofoo = bar,
hace exactamente lo mismo.print s % (x)
es lo que escribió OP, solo lo estaba citando.foo = (bar, )
(x)
notación para mayor claridad; también evita olvidar los corchetes si luego agrega variables adicionales.Debería echar un vistazo al método de formato de Python. Luego podría definir su cadena de formato de esta manera:
fuente
%
El operador solo desempaqueta las tuplas.s
más compleja, ya que necesitaría incluir números incrementales en lugar de simplemente%s
para cada posición.s
se crea en varios pasos diferentes, por lo que es mucho más fácil incluir el%s
token.print u'%(blah)d BLAHS %(foo)d FOOS …' % {'blah': 15, 'foo': 4}
.s = '{} BLAH {} BLAH BLAH {} BLAH BLAH BLAH'
Siguiendo esta página de recursos , si la longitud de x varía, podemos usar:
para crear un marcador de posición para cada elemento de la lista
x
. Aquí está el ejemplo:fuente
Aquí hay un trazador de líneas. Una pequeña respuesta improvisada usando formato con print () para iterar una lista.
¿Qué tal esto (python 3.x):
Lea los documentos aquí sobre el uso de format () .
fuente
Como acabo de enterarme de esta cosa interesante (indexar en listas desde una cadena de formato), estoy agregando a esta vieja pregunta.
Salida:
Sin embargo, todavía no he descubierto cómo cortar (dentro de la cadena de formato
'"{x[2:4]}".format...
) y me encantaría averiguarlo si alguien tiene una idea, sin embargo, sospecho que simplemente no puede hacer eso.fuente
¡Esta fue una pregunta divertida! Otra forma de manejar esto para listas de longitud variable es construir una función que aproveche al máximo el
.format
método y el desempaquetado de listas. En el siguiente ejemplo, no utilizo ningún formato elegante, pero se puede cambiar fácilmente para adaptarlo a sus necesidades.fuente
Lo mismo que la respuesta de @ neobot pero un poco más moderna y concisa.
fuente
La salida es
fuente