Cer*_*ero 5 python compression
我需要创建一个名为compress的函数,通过用字母和数字替换任何重复的字母来压缩字符串.我的函数应该返回缩短版本的字符串.我已经算出了第一个角色而不是其他角色.
例如:
>>> compress("ddaaaff")
'd2a3f2'
def compress(s):
count=0
for i in range(0,len(s)):
if s[i] == s[i-1]:
count += 1
c = s.count(s[i])
return str(s[i]) + str(c)
Run Code Online (Sandbox Code Playgroud)
这是一个压缩函数的简短python实现:
def compress(string):
res = ""
count = 1
#Add in first character
res += string[0]
#Iterate through loop, skipping last one
for i in range(len(string)-1):
if(string[i] == string[i+1]):
count+=1
else:
if(count > 1):
#Ignore if no repeats
res += str(count)
res += string[i+1]
count = 1
#print last one
if(count > 1):
res += str(count)
return res
Run Code Online (Sandbox Code Playgroud)
这里有一些例子:
>>> compress("ddaaaff")
'd2a3f2'
>>> compress("daaaafffyy")
'da4f3y2'
>>> compress("mississippi")
'mis2is2ip2i'
Run Code Online (Sandbox Code Playgroud)
小智 5
带发电机的短版:
from itertools import groupby
def compress(string):
return ''.join('%s%s' % (char, sum(1 for _ in group)) for char, group in groupby(string)).replace('1', '')
Run Code Online (Sandbox Code Playgroud)
(1)按字符分组 groupby(string)
(2)用计数组的长度sum(1 for _ in group)
(因为不可能len
在组上)
(3)加入适当的格式
(4)删除1
单个项目的字符
归档时间: |
|
查看次数: |
17765 次 |
最近记录: |