我需要从用户那里收到一个字符串,将其显示在列表中,这样列表中的每个器官都包含[字母,它连续重复的数字]。
我认为我的代码很好,但它不起作用。
这是我的代码:
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]]
答案 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)])