有一个清单:
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 )
无法连接string
和int
,因此它变为:
print ",".join(i.__class__==string and i or str(i) for i in x )
给出:
s,2,3,4,5,6
这就是我被困住的地方。
答案 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的回答,但我也想指出:
在开始优化打印之前,您需要确保打印确实是程序的瓶颈(很少见)。
expr1 and expr2 or expr3
三元运算符时,在Python 2.5之前使用了 expr2 if expr1 else expr3
。如果您没有将Py< = 2.4作为目标,则if else
更可取。
最好不要i.__class__==string
而是写isinstance(i, string)
(string
是什么?你的意思是str
?)。
此外,您实际上并不需要检查:字符串的str()
只返回此字符串。
Python中没有++
运算符。 ++count == +(+count) == count
。