2010-05-24 97 views
8

我有一個關於Python中的循環結構的問題,形式如下:for x in y:在我的情況下,y是從文件中讀取的一行,x是單獨的字符。我想在輸出中的每一對字符之後放置一個空格,如下所示:aa bb cc dd等。所以,我想知道當前的迭代。是否有可能,還是我需要使用更傳統的C風格循環與索引?。我可以找出我目前正在進行的迭代嗎?

回答

21
for i,x in enumerate(y): 
    .... 
+0

謝謝,這真是太棒了。 – foo 2010-05-24 01:48:44

+0

順便說一句,在我和x之後的逗號之間加一個空格是不是很好的風格? – 2010-05-24 02:02:30

+0

是的,這是一個很好的風格,但我和x之間的空間。 – 2010-05-24 02:09:54

1

使用enumerate

for index,x in enumerate(y): 
    # do stuff, on iteration #index 

或者,只創建一個變量,並增加它的循環體中。儘管如此,這並不完全是「pythonic」。

cur = 0 
for x in y: 
    cur += 1 
    # do stuff, on iteration #cur 
+6

'cur ++'是如此unpythonic以給出語法錯誤,所以它很難被推薦;-)。我認爲你的意思是'cur + = 1'(至少可以工作,雖然與枚舉相比它很糟糕;-)。 – 2010-05-24 01:40:30

+0

謝謝。我結束了使用枚舉。我不確定它有什麼區別,但也許手動計數更清晰? Ahem,至少對於不熟悉Python的人來說,至少可以看看代碼。 – foo 2010-05-24 01:50:43

+0

@亞歷克斯,是的,我實際上剛剛完成了一個apt。所以我現在有點疲憊。 (是的,'enumerate'更漂亮了。) – Amber 2010-05-24 02:20:14

0

如果你正在做的是將每對字符後面輸入一個空格,你可能想要做的事情與列表內涵,如:

' '.join([''.join(characterPair) for characterPair in zip(*[iter(line + ' ')] * 2)]) 

不附加額外的空間,最後一個字符具有奇數字符的行將被刪除;在附加的空格中,具有奇數個字符的行將在末尾具有額外的空間。

(有可能是做的比我做了什麼更Python的方式。)

0

我真的不能做的情況下,這是比enumerate方法好,但不太明顯某人從C的角度來,所以我想我會點出來的完整性:

from itertools import izip_longest 
' '.join(j + k for j,k in izip_longest(fillvalue='', *([iter(line)]*2))) 

在Python它通常首選(或至少鼓勵)做搭配發電機或類似這樣的列表內涵的東西,而不是依靠enumerate

這是從itertools module documentationgrouper方法的變體。

相關問題