3 回答

TA贡献1865条经验 获得超7个赞
如果我正确地回答了您的问题,那么您正在尝试对字符串中的每个字符进行计数并将结果存储在列表中。蛮力的做法是使用字典来跟踪字符和它出现的次数。这是代码:
st= "kkikkd"
l=[]
temp=1
for i in range(1,len(st)):
if st[i-1] == st[i]:
temp += 1
else:
l.append([st[i-1],temp])
temp= 1
if st[i] == st[i-1]:
temp += 1
l.append([st[i],temp])
输出: [['k', 2], ['i', 1], ['k', 2], ['d', 1]]

TA贡献1793条经验 获得超6个赞
您可以使用 itertools.groupby
>>> from itertools import groupby
>>> s = 'kkikkd'
>>> [[k, len(list(v))] for k,v in groupby(s)]
[['k', 2], ['i', 1], ['k', 2], ['d', 1]]
或者,您也可以使用它re.findall来执行此操作
>>> import re
>>> [[k, len(v)] for v,k in re.findall(r'((.)\2*)', s)]
[['k', 2], ['i', 1], ['k', 2], ['d', 1]]

TA贡献1963条经验 获得超6个赞
首先,您的代码中有两个问题
def chnum(xtrr):
lis2 = []
for n in xtrr:
if lis2[0][0] == n: # lis2 is empty. It does not have 0th element, much less another nested list.
# this will only check if n is in the first element of lis2, what about all the other elements?
continue
lis1=[n]
i = 0
for m in xtrr:
if n== m:
i+=1
lis1 += [i]
lis2 += [lis1]
return lis2
print(chnum('kkidduus'))
但是我建议不要修复它,而是建议使用 python 的强大功能。特别是它的字典像这样:
def chnum(xtrr):
d = {n:0 for n in xtrr} # create a dict where keys are letters from input string
for n in xtrr:
d[n] += 1
# for each letter from input increment the dict's value for that letter
return d
print(chnum('kkidduus'))
您将看到这段代码更加简洁和易读。如果您真的坚持要以嵌套列表的形式获得结果,那么这本词典也是一个很好的起点。l = [list(t) for t in chnum('kkidduus').items()]事后做
编辑:OP希望在每次重复字母时查看计数,因此可以修改上面的代码以适应
def chnum(xtrr):
d = {n:0 for n in xtrr} # create a dict where keys are letters from input string
for n in xtrr:
d[n] += 1
# for each letter from input increment the dict's value for that letter
l = [[n, d[n]] for n in xtrr]
return l
print(chnum('kkidduus'))
使用字典在这里仍然有好处,因为 dict 键是散列的,因此在计算字母出现时具有速度优势
添加回答
举报