Итерация по строке 2 (или n) символов за раз в Python - PullRequest
31 голосов
/ 22 июля 2009

Раньше сегодня мне нужно было перебирать строку по 2 символа за раз для разбора строки, отформатированной как "+c-R+D-E" (есть несколько дополнительных букв).

Я закончил с этим, который работает, но выглядит уродливо. Я закончил тем, что комментировал то, что он делал, потому что это казалось неочевидным. Это почти кажется питоническим, но не совсем.

# Might not be exact, but you get the idea, use the step
# parameter of range() and slicing to grab 2 chars at a time
s = "+c-R+D-e"
for op, code in (s[i:i+2] for i in range(0, len(s), 2)):
  print op, code

Существуют ли лучшие / более чистые способы сделать это?

Ответы [ 12 ]

0 голосов
/ 22 апреля 2014

Вот мой ответ, немного чище для моих глаз:

for i in range(0, len(string) - 1):
    if i % 2 == 0:
        print string[i:i+2]
0 голосов
/ 02 апреля 2014

Я столкнулся с подобной проблемой. Закончилось делать что-то вроде этого:

ops = iter("+c-R+D-e")
for op in ops
    code = ops.next()

    print op, code

Я чувствовал, что это было наиболее читабельным.

...