sentencias - tipos de datos en python
longitud variable de% s con el operador% en python (4)
Estoy tratando de hacer esto:
max_title_width = max([len(text) for text in columns])
for column in columns:
print "%10s, blah" % column
Pero quiero reemplazar el 10
con el valor de max_title_width
. ¿Cómo hago esto de la manera más pitónica posible?
Este es un remanente de la marca de formato C:
print "%*s, blah" % (max_title_width,column)
Si desea un texto justificado a la izquierda (para entradas más cortas que max_title_width
), coloque un ''-'' antes de ''*''.
>>> text = "abcdef"
>>> print "<%*s>" % (len(text)+2,text)
< abcdef>
>>> print "<%-*s>" % (len(text)+2,text)
<abcdef >
>>>
Si el campo len es más corto que la cadena de texto, la cadena simplemente se desborda:
>>> print "<%*s>" % (len(text)-2,text)
<abcdef>
Si desea recortar a una longitud máxima, use ''.'' Campo de precisión del marcador de posición de formato:
>>> print "<%.*s>" % (len(text)-2,text)
<abcd>
Póngalos todos juntos de esta manera:
%
- if left justified
* or integer - min width (if ''*'', insert variable length in data tuple)
.* or .integer - max width (if ''*'', insert variable length in data tuple)
Python 2.6+ ejemplos de versiones alternativas:
>>> ''{:{n}s}, blah''.format(''column'', n=10)
''column , blah''
>>> ''{:*>{l}s}''.format(password[-3:], l=len(password)) # password = ''''
''**********low''
>>> ''{:,.{n}f} {}''.format(1234.567, ''USD'', n=2)
''1,234.57 USD''
Sugerencia: primero args sin palabra clave, luego args de palabra clave.
Tiene los nuevos métodos de formato de cadenas de Python 3 y Python 2.6.
Comenzando en Python 2.6, las clases str y unicode incorporadas brindan la capacidad de realizar sustituciones de variables complejas y formateo de valores a través del método str.format () descrito en PEP 3101. La clase Formatter en el módulo de cadena le permite crear y personalizar sus propios comportamientos de formateo de cadenas utilizando la misma implementación que el método format () incorporado.
(...)
Por ejemplo , suponga que desea tener un campo de reemplazo cuyo ancho de campo esté determinado por otra variable :
>>> "A man with two {0:{1}}.".format("noses", 10) "A man with two noses ." >>> print("A man with two {0:{1}}.".format("noses", 10)) A man with two noses .
Así que para tu ejemplo sería
max_title_width = max(len(text) for text in columns)
for column in columns:
print "A man with two {0:{1}}".format(column, max_title_width)
Personalmente, me encantan los nuevos métodos de formato, ya que son mucho más poderosos y legibles en mi humilde opinión.
usted podría crear su plantilla fuera del bucle:
tmpl = ''%%%ds, blah'' % max_title_width
for column in columns:
print tmpl % column
También puedes aprender sobre el nuevo formato en python.
y por cierto, max
no requiere una lista, puede pasarla en iterable:
max_title_width = max(len(i) for i in columns)