es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con la alineación de mi salida (f string) en Python

Estoy teniendo problemas para alinear las cosas en mi salida. A continuación he copiado la salida esperada y la salida que me da mi código. Es muy similar, sin embargo, los números no están alineados correctamente. Mis números se alinearían a la derecha (y esta primera columna solo puede ser tan larga como el número más largo en esta columna). ¿Qué estoy olvidando en mi código?

Esperado:

 1 aggc tgtc aatg
13 ctag gcat agaa
25 gtcg tgct gtag
37 agat agtc tgat
49 agtc gc

Obtenido:

1 aggc tgtc aatg
13 ctag gcat agaa
25 gtcg tgct gtag
37 agat agtc tgat
49 agtc gc

Aquí está el código en el que ocurre este problema. He omitido algunas líneas para simplificar, indicadas por (…):

for block in blocks:
    (...)
        to_return += f'{str(index_row):>} {block_row}\n'

# imprime nuestra línea final después de iterar a través de todos los bloques
(...)
to_return += f'{str(index_row):>} {block_row}'
return to_return

Pensé que usando un f-string con el símbolo “>” alinearía mis números a la derecha. Mi suposición es que necesito un número después del símbolo “>”. Lo que ocurre es que no sé de antemano qué número, ya que el ancho de esta primera columna debe ser tan largo como el número más grande en mi salida (y no sé cuán largo será este número).

¡Gracias por cualquier ayuda y consejo!

EDITAR: Mi suposición es que necesitaré usar un número después del signo “>”. Dado que tendré que calcular este número y guardarlo en una variable, ¿puedo usar un nombre de variable en lugar de un número, así?

to_return += f'{str(index_row):>longitud} {block_row}\n’

Esta línea arroja un error de valor. ¿Hay alguna forma en que esto pueda funcionar?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar un nombre de variable en lugar de un número para especificar el ancho de la columna. Aquí tienes un ejemplo de cómo hacerlo:

    # Calcular la longitud máxima del número de índice
    max_index_length = len(str(len(blocks) * block_size))
    # Iterar a través de los bloques y formatear el resultado
    to_return = ""
    for i, block in enumerate(blocks):
        for j in range(block_size):
            index = i * block_size + j
            if index >= len(seq):
                break
            if j == 0:
                to_return += f"{str(index + 1):>{max_index_length}} "
            to_return += f"{seq[index]} "
        to_return += "\n"
    return to_return
    

    En este ejemplo, max_index_length se calcula como la longitud del número de índice más grande. Luego, al formatear el resultado, se utiliza f"{str(index + 1):>{max_index_length}}" para alinear a la derecha el número de índice con un ancho de max_index_length.

Comments are closed.