2013-10-16 88 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