Python 字符串格式化 - 可以用 lambda 吗?
我正在做一些格式化的表格打印,我想知道怎么才能做到像下面这样。我觉得这可能需要用到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])