Python字符串格式化 - 可能使用lambda?

时间:2011-10-31 09:56:34

标签: python lambda string-formatting

我正在做一些格式化的表格打印,我想知道我怎么能做这样的事情,我认为这是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

基本上,这样做(下面)但是更清洁。 PS。我知道下面的例子不起作用,但是你得到了我的漂移

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 :(得分: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])

答案 1 :(得分: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 :(得分:0)

这应该是你的意思

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

这个想法只是使用format(*xxx)来调用具有可变数量参数的格式。