对齐我的输出(f 字符串)时出现问题 Python

Problem with alligning my output (f string) Python

我在对齐输出中的内容时遇到了一些问题。在下面,我复制了预期的输出和我的代码给我的输出。它非常相似,但是数字没有正确对齐。我的数字将向右对齐(第一列的长度只能与该列中最长的数字一样长)。我在代码中忘记了什么?

预计:

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

得到:

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

这是出现这个问题的代码。为了简单起见,我省略了一些行,用 (...) 表示:

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

# print our final line after iterating through all the blocks
(...)
to_return += f'{str(index_row): >} {block_row}'
return to_return

我认为使用带有“>”符号的 f 字符串会使我的数字右对齐。我的猜测是我需要在“>”符号后输入一个数字。问题是,我事先不知道是哪个数字,因为第一列的宽度应该与我输出中的最大数字一样长(而且我不知道这个数字有多长)。

感谢您的帮助和提示!

编辑:我猜我需要在 > 符号后使用一个数字。因为我必须计算这个数字并将它存储在一个变量中,我可以使用变量名而不是数字,像这样:

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

这一行给出了值错误。有什么办法可以做到吗?

需要在>后面加数字表示长度。尝试:

f'{index_row: >2} {block_row}'

所以:

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

# print our final line after iterating through all the blocks
(...)
to_return += f'{str(index_row): >2} {block_row}'
return to_return

一旦你得到了变量中最大数字的长度,你需要像这样将它包装在 {} 中:

to_return += f"{index_row:>{length}} {block_row}\n"

示例:

blocks = [(1, "aggc"), (13, "tgtc"), (135, "aatg")]
length = 3
to_return = ""
for index_row, block_row in blocks:
    to_return += f"{index_row:>{length}} {block_row}\n"
print(to_return.rstrip())

示例输出:

  1 aggc
 13 tgtc
135 aatg