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

正如Amber所建议的,您需要的内容已由集合模块中的 Counter 字典提供。

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