для x в y введите повторение в Python. Я могу узнать, на каком повторении я в настоящее время нахожусь?

У меня есть вопрос о конструкции цикла в Python в форме: for x in y: В моем случае y является строкой, считанной из файла, и x является отдельными символами. Я хотел бы поместить пространство после каждой пары символов в выводе, как это: aa bb cc dd и т.д. Так, я хотел бы знать текущее повторение. Действительно ли это возможно, или я должен использовать более традиционный стиль C для цикла с индексом?

8
задан foo 24 May 2010 в 01:34
поделиться

4 ответа

for i,x in enumerate(y):
    ....
21
ответ дан 5 December 2019 в 07:34
поделиться

Если то, что вы делаете, вставляете пробел после каждой пары символов, вы можете сделать что-то с пониманием списка, например:

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

Без добавления лишнего пробела, последний символ строк при нечетном количестве символов будет сброшено; с добавленным пробелом строки с нечетным числом символов будут иметь дополнительный пробел в конце.

(Возможно, есть более питонический способ сделать это, чем то, что сделал я.)

0
ответ дан 5 December 2019 в 07:34
поделиться

Используйте enumerate :

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

В качестве альтернативы просто создайте переменную и увеличьте ее на единицу внутри тела цикла. Однако это не совсем так «питонический».

cur = 0
for x in y:
    cur += 1
    # do stuff, on iteration #cur
1
ответ дан 5 December 2019 в 07:34
поделиться

Я не могу утверждать, что этот метод лучше метода enumerate, но он менее очевиден для человека, изучающего язык Си, поэтому я решил указать его для полноты:

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

В Python часто предпочитают (или по крайней мере поощряют) делать что-то с помощью генераторов или понимания списков, как этот, вместо того, чтобы полагаться на enumerate.

Это вариация метода grouper из документации к модулю itertools.

0
ответ дан 5 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: