ばぐばぐわーるど

Pythonなどなど

【Python】 文字列を2文字ずつ処理する

s= "abcdefgh"
for i in s[::2]:
    if i != s[-1]:
        print i+s[s.index(i)+1]

実行結果

ab
cd
ef
gh

追記)

よくよく考えてみたら s="abaacd"みたいな感じで重複文字あったらindex()だとうまくいきません。なんとなくrange(len())としたくなかったのですが、その場合は下の方法でなきゃだめですね。


ほんとは if文を挟まずにすむ方法を探してました。
以下、迷走の記録

1 素直に考える

最初に思いついたのがこれです。

for i in range(0,len(s),2):
    if i != len(s)-1:
        print s[i]+s[i+1]
2 generatorを使う

なんか大げさな気もします。

def gen():
    for i,j in zip(s[::2],s[1::2]):
        x,y=i,j
        yield x+y 

for i in gen():
    print i
3 itertoolsを使う

使い方よく分からないです。

import itertools

a,b = itertools.tee(s)
next(b)
n = 0
for i in zip(a,b):
    if n % 2 == 0:
        x, y = i
        print x+y
    n += 1