Python列表打印(格式化)

时间:2013-10-16 09:41:36

标签: python-2.7

有一个清单:

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,真的不是我的目标。

a)str(++ count)什么都不打印,count ++给出了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

这就是我被困住的地方。

2 个答案:

答案 0 :(得分:7)

我建议使用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

答案 1 :(得分:2)

虽然我同意@ ARodas的回答,但我也想指出:

  1. 在开始优化打印之前,您需要确保打印确实是程序的瓶颈(很少见)。

  2. 在引入expr1 and expr2 or expr3三元运算符时,在Python 2.5之前使用了
  3. expr2 if expr1 else expr3。如果您没有将Py< = 2.4作为目标,则if else更可取。

  4. 最好不要i.__class__==string而是写isinstance(i, string)string是什么?你的意思是str?)。

    < / LI>
  5. 此外,您实际上并不需要检查:字符串的str()只返回此字符串。

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