2017-06-13 11 views
0

文字列が "xxxyyz"の場合、出力は3x2y1zになります この質問を行う方法についてはわかりませんが、複数の方法を試しましたが、私はプログラミングを学習文字列のランレングス符号化を計算する

s = input("Please type a sentence or word: ") 
i = 0 
count = 1 
while len(s) <=i: 
    if s[i] == s[i+1]: 
     count = count+1 
     s1 = count + s[i] 

最初の週たいと私はイムがやって知っている出力がうまくいけば、誰かが明確に役立ち、おそらく私は ありがとう何をすべきかを説明することができ間違っています!

答えて

0

これはお試しできるバージョンです。それはループの最後に残るものに印刷できるようにすると同時に、入力文字列の隣接する二つの文字を反復する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)) 
+0

はそんなにあなたに感謝するために:nxtは、ループ後にアクセス可能です状況! – BrianStolars

+0

申し訳ありませんが、私はxxxyyzzを入れたときに出力が3x2y1zではなく3x2y1yになりました。「if i == lgth-2」を変更して他のセクションで再生しましたが、なぜz – BrianStolars

+0

? ...私は '' xxxyyzz ''の入力に対して '' 3x2y2z ''を得ます。 –

0

使用collections.Counterそれ

import collections 
collections.Counter(your_string) 
関連する問題