2013-10-16 89 views
1

有一个列表:Python列表打印(格式化)

x=['s',2,'3',4,5,6] 

我可以打印它像这样:

for i in x: 
     print i 

然而,正如我已经找到了,这是一个快一点,只需使用一个print语句,像这样(下面是我得到了这一点):

print "\n".join(i.__class__==string and i or str(i) for i in x) 

假设我想在使用第二个选项,而我想的输出是这样的(我也想有一个计数器): v1: s v2: 2 v3: 3 etc

这里是我试过:

1)

count=0 
print (("v"+str(++count)).join(":%s "% i for i in x )) 

结果是::s, v0:2, v0:3, v0:4, v0:5, v0:6,真的不是我的目标。

一)STR(++计数)打印什么,算++给synthax错误

B)第一v是无处可寻,因为join在这种情况下,增加了分离器和没有必要为第一要素

2)

print (["v"+str(++count)+ ":%s, "% i for i in x ]) 

给人['v0:s, ', 'v0:2, ', 'v0:3, ', 'v0:4, ', 'v0:5, ', 'v0:6, ']更好,但仍然没有counter,我不希望[]正在显示

3) 划痕所有并重新启动:

print ",".join(i for i in x) 

不能连接stringint所以它成为:

print ",".join(i.__class__==string and i or str(i) for i in x) 

其给出:

s,2,3,4,5,6 

这里是我卡住的地方。

+0

的可能的复制[在Python中,有在没有明确的循环自定义格式打印列表中的一个优雅的方式?(https://stackoverflow.com/questions/4440516/in-python-is-有一个优雅的方式来打印一个自定义格式的列表中没有前) – nelaaro

回答

4

我会建议使用enumerate

x = ['s',2,'3',4,5,6] 
print ', '.join('v{}: {}'.format(v, i) for v, i in enumerate(x)) 
# v0: s, v1: 2, v2: 3, v3: 4, v4: 5, v5: 6 
2

虽然我与@ ARodas的答案达成一致,我想还指出:

  1. 你需要确保印刷在开始优化之前,它确实是程序中的一个瓶颈(它很少)。

  2. expr1 and expr2 or expr3在Python 2之前使用。5,当expr2 if expr1 else expr3三元运算符被引入。如果您不打算使用Py < = 2.4,那么if else更可取。取而代之的i.__class__==string

  3. ,最好是写isinstance(i, string)(什么是string啊?你的意思是str?)。

  4. 此外,你并不需要检查:str()一个字符串只是返回这个字符串。

  5. Python中没有++运算符。 ++count == +(+count) == count

+0

非常好的指针,谢谢 – CosminO