2010-05-24 90 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方法的变体。

相关问题