2010-08-03 86 views
0
for i in range(len(results_histogram)): 
    if i!=len(results_histogram)-1: 
     url+=str(results_histogram[i])+',' 

我的if語句是檢查我是否在最後一個循環,但它不工作。我究竟做錯了什麼?蟒蛇:我怎麼知道當我在最後一個循環

+0

這是完整的陳述嗎?不要被冒犯,但你實際上是在閱讀文檔嗎?學習自己找答案是非常重要的。也許你應該在使用Python之前閱讀文檔* – 2010-08-03 23:00:05

+0

我完全同意你的看法。 – 2010-08-03 23:04:31

+0

@Felix,這很荒謬。除了人們以不同的方式學習,實驗通常是一種很好的學習方式,NOBODY在使用之前將所有文檔讀取到Python或其他任何文檔中。不要傲慢。 – Triptych 2010-08-03 23:13:38

回答

7

爲了避免這個問題咯,你似乎已經改寫str.join

','.join(results_histogram) 

如果你得到這樣的錯誤TypeError: sequence item 0: expected string, int found,那麼你可以將中間結果轉換爲字符串

','.join(map(str, results_histogram)) 

str.join無疑比在一個循環中連接多個字符串更有效,因爲在Python中,字符串是免疫的表,所以每個連接都會導致創建一個新的字符串,然後必須稍後進行垃圾回收。


具體,你的榜樣是「不工作」,因爲你跳過最後一個元素完全,當你只是想跳過添加逗號。這是明確而清晰的一個小例子:

>>> x = [1,2,3] 
>>> for i in range(len(x)): 
... if i != len(x) - 1: 
...  print str(x[i]) + ',', 
... 
1, 2, 

所以,你可以重寫你的例子作爲

for i in range(len(results_histogram)): 
    url += str(results_histogram[i]) 
    if i!=len(results_histogram)-1: 
     url += ',' 

但你還是應該堅持str.join

+0

爲什麼不能按照我現在這樣做的方式>? – 2010-08-03 22:59:57

+1

@I__:因爲它不必要的複雜。 – 2010-08-03 23:01:07

+0

我在+ – 2010-08-03 23:01:15

1

Mark對你的例子肯定是正確的,但有時候會出現這樣的情況,如果不存在這樣一個優雅的選擇。然後,您可以執行如下操作:

if len(results_histogram): 
    url += str(results_histogram[0]) 
    for i in range(len(results_histogram))[1:]: 
     url += ',' + str(results_histogram[i]) 
1

使用變量通過列表增加通常是不必要的。切片將返回除最後一個元素之外的所有內容。

本示例遵循你的語法:

for el in results_histogram[:-1]: 
    url += str(el) + ',' 

或者你可以完成與發電機表達了整個事情:

','.join(str(el) for el in results_histogram[:-1]) 
2

我與@馬克Rushakoff在使用連接將是最好的同意。我想只是在此發表評論,但我沒有足夠的代表這樣做=(

不管怎麼說,也考慮內置的枚舉()函數。該文件可以發現here

的一種方式你可以使用枚舉將已編碼的解決方案:。

for i, res in enumerate(results_histogram): 
    url+=res 
    if i != len(results_histogram)-1: 
     url+=',' 

假設URL是先前宣佈的地方使用加入您的具體情況會更好同樣,這只是顯示你列舉了您可能希望將來情況除了字符串連接以外還有其他的事情。

+0

這不是'如果我!= len(results_histogram) - 1:'? – jpsimons 2010-08-03 23:34:11

+0

是的,修復了使用'enumerate'的問題 – user389875 2010-08-03 23:35:35

+0

+1。恕我直言,Python標準庫中最被低估的函數之一。最重要的是,即使'len()'不可用(例如,如果你正在處理一個懶惰地計算序列的生成器函數),它也可以工作。 – 2010-08-03 23:43:43

0
ouput = "(" 
for telem in text[:-1]: 
    output += "%s, " % telem 
output += "%s)\n" % text[-1:]