6

文字列(入力)をスライスしてリストに追加し、各文字の数を数えるコードを作成する必要があります。それが前の文字と同じである場合は、リストに入れないでください。むしろ前の文字のその文字の出現数を増やしてください..まあ、これはそれがどのように見えるべきかです:

assassin [['a', 1], ['s', 2], ['a', 1], ['s', 2]], ['i', 1], ['n', 1]

暗殺者という言葉は必要性のほんの一例です。これまでの私のコードは次のようになります。

userin = raw_input("Please enter a string :")
inputlist = []
inputlist.append(userin)
biglist = []
i=0
count = {}
while i<(len(userin)):
    slicer = inputlist[0][i]
    for s in userin:
        if count.has_key(s):
            count[s] += 1
        else:
            count[s] = 1
    biglist.append([slicer,s])
    i = i+1
print biglist 

ありがとう!

4

3 に答える 3

19

を使用Collections.Counter()して、辞書はこれを保存するためのより良い方法です:

>>> from collections import Counter
>>> strs="assassin"
>>> Counter(strs)
Counter({'s': 4, 'a': 2, 'i': 1, 'n': 1})

または使用itertools.groupby()

>>> [[k, len(list(g))] for k, g in groupby(strs)]
[['a', 1], ['s', 2], ['a', 1], ['s', 2], ['i', 1], ['n', 1]]
于 2012-11-02T14:56:49.467 に答える
2
last = ''
results = []
word = 'assassin'
for letter in word:
if letter == last:
    results[-1] = (letter, results[-1][1] +1)
else:
    results.append((letter, 1))
    last = letter

print result # [('a', 1), ('s', 2), ('a', 1), ('s', 2), ('i', 1), ('n', 1)]
于 2012-11-02T15:45:25.880 に答える
1

組み込みのみを使用する:

def cnt(s):
    current = [s[0],1]
    out = [current]
    for c in s[1:]:
        if c == current[0]:
            current[1] += 1
        else:
            current = [c, 1]
            out.append(current)
    return out

print cnt('assassin')
于 2012-11-02T15:06:15.637 に答える