gpt4 book ai didi

python - python 中的动态字符串格式化

转载 作者:行者123 更新时间:2023-11-30 23:19:02 25 4
gpt4 key购买 nike

我想按如下方式打印我的输出。虽然乍一看似乎很容易完成,但问题如下。列数可以不同,可以是负数、不同位数的数字等。

那么我怎样才能完美地做到这一点,以便无论内部因素如何变化,外边界都保持完整。

我知道我必须在 python 中使用字符串格式,但不知道该怎么做。
1. 我应该使用什么逻辑来打印标题+---+
如何根据里面元素的数量来决定长度?
2. 如何以固定宽度和对齐方式打印数字?

+---------------------------+  
| 3 4 -4 -8 -10 -12 |
| 5 5 3 -3 -4 -44 |
| 34 -4 -34 -22 22 22 |
+---------------------------+

编辑

我想使用字符串格式化来实现此目的,而不是借助模块的帮助。

最佳答案

不使用包和模块:

nums= [[  3, 4, -4,  -8, -10, -12,], [  5, 5,  3,  -3,  -4, -44,], [ 34,-4,-34, -22,  22,  22]]

t = ['|' + ''.join('%4i' % i for i in row) + ' |' for row in nums]
hdr = '+' + (len(t[0])-2) * '-' + '+'
print '\n'.join( [hdr] + t + [hdr] )

这会产生输出:

+-------------------------+
| 3 4 -4 -8 -10 -12 |
| 5 5 3 -3 -4 -44 |
| 34 -4 -34 -22 22 22 |
+-------------------------+

它是如何工作的:

  • t = ['|' + ''.join('%4i' % i for i in row) + ' |'对于 nums 中的行]

    t 包含除顶行和底行之外的所有内容。从本质上讲,数字被格式化为固定宽度并根据规范 %4i 对齐。 %4i 表示允许四个空格,格式为整数,右对齐。许多其他规范也是可能的。例如,如果您想要将 5 个空格宽的整数左对齐,请使用 %-5i

  • hdr = '+' + (len(t[0])-2) * '-' + '+'

    现在内部行已保存在 t 中,我们可以组装标题行和结尾行。这些行以加号开始和结束。其余部分用 - 填充。

  • print '\n'.join( [hdr] + t + [hdr] )

    这会将 hdr 字符串添加到行列表 t 的开头和结尾,然后使用换行符将所有行连接在一起以形成最终表格。

更复杂的示例

让我们格式化上表,但在每行末尾添加每行的最小值、最大值、平均值和标准差。

def mmmsd(row):
mean=sum(row)/len(row)
stddev = ( sum( (x-mean)**2.0 for x in row ) / float(len(row)) )**0.5
return '%6i%6i%6.2f%6.2f' % (min(row), max(row), mean, stddev)

nums= [[ 3, 4, -4, -8, -10, -12,], [ 5, 5, 3, -3, -4, -44,], [ 34,-4,-34, -22, 22, 22]]

stats = [mmmsd(row) for row in nums]
t = [10*' ' + '|' + ''.join('%6i' % i for i in row) + ' |' + st for row, st in zip(nums, stats)]
hdr = 10*' ' + '+' + (len(t[0])-12 - len(stats[0])) * '-' + '+' + len(stats[0]) * ' '
print '\n'.join( [hdr] + t + [hdr] )

这会产生结果:

          +-------------------------------------+
| 3 4 -4 -8 -10 -12 | -12 4 -5.00 6.18
| 5 5 3 -3 -4 -44 | -44 5 -7.00 17.23
| 34 -4 -34 -22 22 22 | -34 34 3.00 24.92
+-------------------------------------+

关于python - python 中的动态字符串格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com