2

ユーザーから文字列を受け取り、それをリストに表示して、リスト内の各オルガンに [文字、連続して繰り返される数字] が含まれるようにする必要があります。

私のコードは良いと思いましたが、うまくいきません。

これが私のコードです:

my_str = raw_input( "Enter a string:" )

j=0
while j<=len(my_str):
    for i in my_str:
        counter=0
        if i==i+1:
            counter +=1
            continue
            print i, counter

        else:
            print i,1
            j+=1

出力:

文字列を入力してください: baaaaab
リスト: [['b', 1], ['a', 5], ['b', 1]]
4

4 に答える 4

3

これはコードとは大幅に異なりますが、これを行うより効率的な方法は、次を使用することitertools.groupbyです。

import itertools
my_str = raw_input("Enter a string:")
print [[g[0], sum(1 for _ in g[1])] for g in itertools.groupby(my_str)]
于 2012-10-29T20:21:04.253 に答える
1

ヒント:ここでは、i+1はあなたが意味するものではありません。Pythonインタープリターは、何が問題なのかを教えてくれます。

ヒント:ここでは、コード内でそのprint i,counter行が実行されることはありません。

于 2012-10-29T20:21:28.487 に答える
0

アンバーが示唆しているように、必要なものはコレクションモジュールのカウンター辞書によってすでに提供されています。

from collections import Counter
my_str = raw_input( "Enter a string:" )
count = Counter(my_str)
print count.items()

唯一の制限は、特殊文字もカウントすることです。標準的な文字だけを数えたい場合は、文字列モジュールを参照して文字のリストを取得し、関心のあるものだけを保持できます。

from collections import Counter
from string import ascii_letters
my_str = raw_input( "Enter a string:" )
count = Counter(s for s in my_str if s in ascii_letters)
print count.items()
于 2012-10-29T23:06:52.510 に答える
-2

以下のコードは実装に似ていますが、set を使用しています。

s = 'abcdeff'
set((i, s.count(i)) for i in s )

出力:

set([('a', 1), ('b', 1), ('c', 1), ('d', 1), ('e', 1), ('f', 2)])
于 2012-10-29T20:36:08.110 に答える