Counting consecutive characters in a string

三世轮回 提交于 2020-01-01 09:42:01

问题


I need to write a code that slices the string (which is an input), append it to a list, count the number of each letter - and if it is identical to the letter before it, don't put it in the list, but rather increase the appearance number of that letter in the one before.. Well this is how it should look like :

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

the word assassin is just an example of the need.. My code so far goes like this:

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 

Thanks!


回答1:


Use Collections.Counter(), dictionary is a better way to store this:

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

or using itertools.groupby():

>>> [[k, len(list(g))] for k, g in groupby(strs)]
[['a', 1], ['s', 2], ['a', 1], ['s', 2], ['i', 1], ['n', 1]]



回答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)]



回答3:


Using only builtins:

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')


来源:https://stackoverflow.com/questions/13197668/counting-consecutive-characters-in-a-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!