2

有一个清单:

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

我可以这样打印:

for i in x:
        print i

但是,正如我发现的那样,只使用一个打印语句会更快一些,如下所示(以下是我如何做到这一点):

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++ 给出合成错误

b) firstv无处可寻,因为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

这就是我卡住的地方。

4

2 回答 2

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
于 2013-10-16T09:45:46.430 回答
2

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

  1. 在开始优化之前,您需要确保打印确实是程序中的瓶颈(这种情况很少发生)。

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

  3. 而不是i.__class__==string写得更好isinstance(i, string)string无论如何,什么是?你的意思是str?)。

  4. 此外,您实际上并不需要检查:str()of a string 只返回此字符串。

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

于 2013-10-16T09:58:50.513 回答