這是您可以嘗試的版本。它採用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
; nxt
是在循環後訪問:
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))
太感謝你了,現在我只需要了解枚舉和拉鍊的意思,但它可以幫助清理所有其他情況! – BrianStolars
對不起,只是另一個問題,當我把xxxyyzz輸出給我3x2y1y而不是3x2y1z,我試着改變「如果我== lgth-2」和其他部分玩,但不知道爲什麼它給y而不是z – BrianStolars
? ...我爲'xxxyyzz'輸入''3x2y2z''。 –