我需要从用户那里收到一个字符串,将其显示在列表中,这样列表中的每个器官都包含[字母,它连续重复的数字]。
我认为我的代码很好但不起作用。 我使用http://pythontutor.com,我发现问题是我的var.next和current始终保持相同的值。
是的有个主意吗?这是我的代码:
string = raw_input("Enter a string:")
i=0
my_list=[]
current=string[i]
next=string[i+1]
counter=1
j=0
while i<range(len(string)) and next<=range(len(string)):
if i==len(string)-1:
break
j+=1
i+=1
if current==next:
counter+=1
else:
print my_list.append([string[i],counter])
counter=1
输出:
Enter a string: baaaaab
As list: [['b', 1], ['a', 5], ['b', 1]]
答案 0 :(得分:3)
在此使用itertools.groupby()
:
>>> from itertools import groupby
>>> [[k, len(list(g))] for k, g in groupby("baaaaab")]
[['b', 1], ['a', 5], ['b', 1]]
或者不使用库:
strs = raw_input("Enter a string:")
lis = []
for x in strs:
if len(lis) != 0:
if lis[-1][0] == x:
lis[-1][1] += 1
else:
lis.append([x, 1])
else:
lis.append([x, 1])
print lis
<强>输出:强>
Enter a string:aaabbbcccdef
[['a', 3], ['b', 3], ['c', 3], ['d', 1], ['e', 1], ['f', 1]]
答案 1 :(得分:1)
Aswini代码的简单变体:
string = raw_input("Enter a string:")
lis = []
for c in string:
if len(lis) != 0 and lis[-1][0] == c:
lis[-1][1] += 1
else:
lis.append([c, 1])
print lis
答案 2 :(得分:0)
您可以使用defaultdict轻松完成此操作:
import collections
defaultdict=collections.defaultdict
count=defaultdict(int)
string="hello world"
for x in string:
count[x]+=1
要在列表中显示,您可以这样做:
count.items()
在这种情况下会返回:
[(' ', 1), ('e', 1), ('d', 1), ('h', 1), ('l', 3), ('o', 2), ('r', 1), ('w', 1)]