对于y中的x,键入python中的迭代。我可以找出什么迭代I';我现在在吗?

对于y中的x,键入python中的迭代。我可以找出什么迭代I';我现在在吗?,python,iteration,Python,Iteration,我有一个关于Python中循环构造的问题,形式是:for x in y:在我的例子中,y是从文件读取的一行,x是单独的字符。我想在输出中的每对字符后面加一个空格,如:aabbcc dd等。因此,我想知道当前的迭代。是否可能,或者我是否需要使用更传统的C样式作为带有索引的循环?使用枚举: for i,x in enumerate(y): .... for index,x in enumerate(y): # do stuff, on iteration #index 或者,只需

我有一个关于Python中循环构造的问题,形式是:
for x in y:
在我的例子中,y是从文件读取的一行,x是单独的字符。我想在输出中的每对字符后面加一个空格,如:
aabbcc dd
等。因此,我想知道当前的迭代。是否可能,或者我是否需要使用更传统的C样式作为带有索引的循环?

使用
枚举

for i,x in enumerate(y):
    ....
for index,x in enumerate(y):
    # do stuff, on iteration #index
或者,只需创建一个变量并在循环体中递增它。不过,这并不像“蟒蛇式”的

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

如果您要做的是在每对字符后插入一个空格,则可能需要使用列表理解,如:

' '.join([''.join(characterPair) for characterPair in zip(*[iter(line + ' ')] * 2)])
在不追加额外空格的情况下,将删除具有奇数个字符的行的最后一个字符;使用附加的空格,具有奇数个字符的行将在末尾有额外的空格


(很可能有一种比我所做的更具python风格的方法。)

我无法证明这比
枚举
方法更好,但对于从C角度来看的人来说,它不太明显,所以我想我应该指出它的完整性:

from itertools import izip_longest
' '.join(j + k for j,k in izip_longest(fillvalue='', *([iter(line)]*2)))
在Python中,通常倾向于(或至少鼓励)使用生成器或类似的列表理解,而不是依赖于
enumerate


这是grouper方法的一个变体。

cur++
非常不音速,导致语法错误,因此很难推荐;-)。我想你的意思是
cur+=1
(这至少是有效的,尽管与enumerate;-)相比有点差劲。谢谢。最后我使用了enumerate。我不确定这会有什么不同,但也许人工计数更清楚?嗯,好吧,至少对于一个不太熟悉Python的人来说,看看代码。@Alex,是的,我实际上刚搬进一个apt。所以我现在有点累了。(是的,
enumerate
要漂亮得多。)如果您担心不熟悉Python的人正在阅读您的代码,您可以随时添加一个简短的内联注释来解释enumerate——但坦率地说,如果您明智地命名变量,它应该是非常直观的。(如果不是的话,‘python enumerate’是一个简单的搜索!)我不会太担心。顺便说一句,在I和x之后的逗号之间加一个空格是好的样式吗?是的,在I和x之间加一个空格是好的样式。