【问题标题】:Problem with alligning my output (f string) Python对齐我的输出(f字符串)Python的问题
【发布时间】:2022-01-06 09:37:14
【问题描述】:

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

预期:

 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'

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

【问题讨论】:

  • 您可以检查最大的数字是多少并使用它的长度;或者您可以使用任意数字,例如 8 或其他数字,具体取决于您对需要打印的最大数字的估计
  • @JiříBaum 谢谢你的帮助。我需要在这里使用一个数字,还是我也可以使用一个变量(例如长度)来引用一个数字?我在 Python 控制台中尝试过,但引用变量似乎不起作用。这是我尝试过的: to_return += f'{str(index_row):>length} {block_row}\n'
  • 我认为有一种特殊的语法可以从变量中获取长度,但我必须在手册中查找它

标签: python alignment string-formatting f-string


【解决方案1】:

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

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

【讨论】:

  • 非常感谢!通过使用您的代码,我必须解决我正在为我的编程课程所做的练习。你的回答很清楚,很简单,而且很有效。感谢您的帮助。
【解决方案2】:

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

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

【讨论】:

  • 我知道添加一个数字可以解决问题,但问题是我不知道这个数字。我计算了最大数字的长度并将其存储在可变长度中。这应该是输出中第一列的宽度。但是,如果我在您的示例中插入一个变量名而不是 2,我会收到一个值错误...我该如何避免这种情况?
猜你喜欢
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多