输入:
abbbbccdddaaabbbbeeff
输出:
ab4c2d3a3b4e2f2
我试过如下,
string = 'abbbbccccd'
strList = list(string)
sum = 0
for i , s in enumerate(string):
# print (strList[i],strList[i+1])
if strList[i] == strList[i+1]:
sum = sum + 1
print(strList[i],'****',sum )
else:
sum = sum + 1
print(strList[i],'****',sum )
sum = 0
但无法打印列表中的最后一个元素。
有没有更好的方法可以在不使用任何内置函数的情况下做到这一点?
编辑:我想了解打印 abb4c2.. 的逻辑。这就是我提到没有任何内置函数的原因。如果逻辑可以理解,使用内置函数是可以的。
请您参考如下方法:
在这些问题中,始终保持当前状态(当前字符和当前计数)。无需索引,逻辑更简单。
最后,不要忘记“刷新”当前循环数据,否则您会错过最后一次迭代。
我的建议:
s = "abbbbccdddaaabbbbeeff"
result = []
current = None
current_count = 0
for c in s:
if current == c:
current_count += 1
else:
if current_count > 1:
result.append(str(current_count))
current_count = 1
current = c
result.append(c)
# don't forget last iteration count
if current_count > 1:
result.append(str(current_count))
print("".join(result))
打印:
ab4c2d3a3b4e2f2
好的,我知道 "".join(result) 会调用内置函数,但这是最有效的方法。您不想逐个字符地追加以从列表中创建字符串。
一旦您证明自己掌握了此类算法,就可以使用 itertools.groupby 等内置工具来完成此类工作。它更快且没有错误(甚至更好:this other answer)
