utilizan tipos sentencias relacionales que programaciĆ³n operadores operador lenguaje datos asignaciones python

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)