【问题标题】:Python list printing (formatting)Python列表打印(格式化)
【发布时间】:2013-10-24 08:48:04
【问题描述】:

有一个清单:

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

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

这就是我卡住的地方。

【问题讨论】:

标签: python-2.7


【解决方案1】:

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

    3. 最好写isinstance(i, string),而不是i.__class__==stringstring 是什么?你是说str吗?)。

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多