これはお試しできるバージョンです。それはループの最後に残るものに印刷できるようにすると同時に、入力文字列の隣接する二つの文字を反復するzip
を使用し、enumerate
:
strg = "xxxyyz"
mult = 1
lgth = len(strg)
for i, (prev, nxt) in enumerate(zip(strg, strg[1:])):
if prev != nxt:
print('{}{}'.format(mult, prev), end='')
mult = 1
else:
mult += 1
if i == lgth-2: # print what is left at the end of the string
print('{}{}'.format(mult, nxt))
ループが
i (prev, nxt)
-------------
0 ('x', 'x')
1 ('x', 'x')
2 ('x', 'y')
3 ('y', 'y')
...
上で実行されます
実際には、enumerate
は必要ありません。今私はちょうど列挙し、ジッパーが何を意味するか理解しなければならないが、それは他のすべてのアップ明確に役立ち、
mult = 1
for prev, nxt in zip(strg, strg[1:]):
if prev != nxt:
print('{}{}'.format(mult, prev), end='')
mult = 1
else:
mult += 1
print('{}{}'.format(mult, nxt))
はそんなにあなたに感謝するために:
nxt
は、ループ後にアクセス可能です状況! – BrianStolars申し訳ありませんが、私はxxxyyzzを入れたときに出力が3x2y1zではなく3x2y1yになりました。「if i == lgth-2」を変更して他のセクションで再生しましたが、なぜz – BrianStolars
? ...私は '' xxxyyzz ''の入力に対して '' 3x2y2z ''を得ます。 –