列出并计算重复字母

时间:2012-10-29 20:18:32

标签: python

我需要从用户那里收到一个字符串,将其显示在列表中,这样列表中的每个器官都包含[字母,它连续重复的数字]。

我认为我的代码很好,但它不起作用。

这是我的代码:

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

输出:

Enter a string: baaaaab
As list: [['b', 1], ['a', 5], ['b', 1]]

4 个答案:

答案 0 :(得分: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)]

答案 1 :(得分:1)

提示:在这里,i + 1不是你的意思。 python解释器告诉你这是什么问题。

提示:在这里,在您的代码中,print i,counter行永远不会被执行。

答案 2 :(得分:0)

根据Amber的建议,collections模块中的计数器专业人员已经提供了您所需要的内容。

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

唯一的限制是它甚至会计算特殊字符。如果您只想计算标准字母,可以参考string模块获取字母列表,只保留您感兴趣的字母:

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

答案 3 :(得分:-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)])