Python 字符串格式化 - 可以用 lambda 吗?

1 投票
3 回答
6353 浏览
提问于 2025-04-17 05:20

我正在做一些格式化的表格打印,我想知道怎么才能做到像下面这样。我觉得这可能需要用到lambda,但我之前从来没有用过,所以不太确定 :)

print "{:^{}}|"*(self.size).format(for i in range(self.size),6) 
# self size is assumed to be 5 in this example, doesn't work, something along this line is needed though

基本上,就是做下面这个,但要更简洁一些。顺便说一下,我知道下面的例子是不能运行的,但你明白我的意思了。

print "{:^{}}" * 5 .format(humangrid[0][0],4,humangrid[0][1],4,humangrid[0][2],4,humangrid[0][3],4,humangrid[0][4],4,

谢谢!

3 个回答

0

这段代码应该能实现你想要的效果。

print(("{:4}|"*len(humangrid[0])).format(*humangrid[0]))

这里的思路就是用 format(*xxx) 这种方式来调用格式化函数,这样可以传入不定数量的参数。

1

假设你想把一个二维的名字列表以居中的表格形式打印出来,这里有一种方法可以做到:

humangrid = [
    ["john", "jacob", "jezebel"],
    ["mary", "maria", "mel"],
    ["shareen", "sean", "shiva"],
]

cell_width = max(len(y) for x in humangrid for y in x)  # get length of longest name
cell_width += 2  # optional padding

for row in humangrid:
    print "|".join(name.center(cell_width) for name in row)

运行这个代码后,你会看到:

   john  |  jacob  | jezebel 
   mary  |  maria  |   mel   
 shareen |   sean  |  shiva  

如果你想改变表格的对齐方式,只需要把 center() 替换成 ljust() 或者 rjust() 就可以了。

你也可以很简单地用 .format() 来替换,但我觉得这种方法更容易理解。

2

这是我最好的猜测:

print '|'.join('{:^6}'.format(i) for i in range(self.size))
...
print ''.join('{:^4}'.format(i) for i in humangrid[0])

如果你真的想用一次 string.format() 来完成这个:

print '|'.join(['{:^6}'*self.size]).format(*range(self.size))
...
print ('{:^4}'*len(humangrid[0])).format(*humangrid[0])

撰写回答