Python:如何用它出现的次数替换一个子串?
Python: how to replace a substring with a number of its occurences?
假设我有一个以下列方式呈现的字符串:
st = 'abbbccccaaaAAbccc'
任务是对其进行编码,以便单个字符后跟它们的多次出现:
st = 'a1b3c4a3A2b1c3'
我知道一种可能的解决方案,但它过于庞大和原始。
s = str(input())
l = len(s)-1
c = 1
t = ''
if len(s)==1:
t = t +s+str(c)
else:
for i in range(0,l):
if s[i]==s[i+1]:
c +=1
elif s[i]!=s[i+1]:
t = t + s[i]+str(c)
c = 1
for j in range(l,l+1):
if s[-1]==s[-2]:
t = t +s[j]+str(c)
elif s[-1]!=s[-2]:
t = t +s[j]+str(c)
c = 1
print(t)
有什么方法可以快速优雅地解决这个问题吗?
P.S:我是一个没有经验的Python用户,也是Whosebug的新成员,所以如果问题问错了,请原谅。
只需遍历并计数。还有更多优雅的片段,但这将完成工作并且很清楚:
count = 1
char = st[0]
new_st = []
for c in st[1:]:
if c == char:
count += 1
else:
new_st.append(char + str(count))
char = c
count = 1
new_st.append(char + str(count))
s2= "".join(new_st)
print(s2) # 'a1b3c4a3A2b1c3'
如果你想要一个奇特的递归解决方案:
def compose(s):
if not s:
return ""
count = 1
for char in s[1:]:
if s[0] != char:
break
count += 1
return s[0] + str(count) + compose(s[count:])
利用标准库:
from itertools import groupby
st = "abbbccccaaaAAbccc"
print("".join("{}{}".format(key, len(list(group))) for key, group in groupby(st)))
输出:
a1b3c4a3A2b1c3
>>>
假设我有一个以下列方式呈现的字符串:
st = 'abbbccccaaaAAbccc'
任务是对其进行编码,以便单个字符后跟它们的多次出现:
st = 'a1b3c4a3A2b1c3'
我知道一种可能的解决方案,但它过于庞大和原始。
s = str(input())
l = len(s)-1
c = 1
t = ''
if len(s)==1:
t = t +s+str(c)
else:
for i in range(0,l):
if s[i]==s[i+1]:
c +=1
elif s[i]!=s[i+1]:
t = t + s[i]+str(c)
c = 1
for j in range(l,l+1):
if s[-1]==s[-2]:
t = t +s[j]+str(c)
elif s[-1]!=s[-2]:
t = t +s[j]+str(c)
c = 1
print(t)
有什么方法可以快速优雅地解决这个问题吗?
P.S:我是一个没有经验的Python用户,也是Whosebug的新成员,所以如果问题问错了,请原谅。
只需遍历并计数。还有更多优雅的片段,但这将完成工作并且很清楚:
count = 1
char = st[0]
new_st = []
for c in st[1:]:
if c == char:
count += 1
else:
new_st.append(char + str(count))
char = c
count = 1
new_st.append(char + str(count))
s2= "".join(new_st)
print(s2) # 'a1b3c4a3A2b1c3'
如果你想要一个奇特的递归解决方案:
def compose(s):
if not s:
return ""
count = 1
for char in s[1:]:
if s[0] != char:
break
count += 1
return s[0] + str(count) + compose(s[count:])
利用标准库:
from itertools import groupby
st = "abbbccccaaaAAbccc"
print("".join("{}{}".format(key, len(list(group))) for key, group in groupby(st)))
输出:
a1b3c4a3A2b1c3
>>>