任意输入一串纯字母字符串,可以输出字母及数量的另一个字符串,
例如:输入:s=aaabbcdddddeeffg
输出:m=a3b2c1d5e2f2g1
可以用列表、字符串、集合等方法。
提示:若需批量命名变量,可用如下方法。
for i in range(10):
exec ("temp%s=1"%i)
一行代码即可完成:
print(''.join([f'{i}{s.count(i)}' for i in [chr(i) for i in range(97,123)] if s.count(i)>0]))
print(''.join([f'{i}{s.count(i)}' for i in [chr(i) for i in range(97,123)] if s.count(i)>0]))
分步解答:
列表推导式建一个纯字母列表
>>>[chr(i) for i in range(97,123)]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
>>> # chr(i) ascii码转字母
查字母个数列表,按条件:s.count(i)>0
s='aaaccdeeee'
>>> [f'{i}{s.count(i)}' for i in [chr(i) for i in range(97,123)] if s.count(i)>0]
['a3', 'c2', 'd1', 'e4']
>>>
合并列表所有元素:
>>> ''.join(['a3', 'c2', 'd1', 'e4'])
'a3c2d1e4'
>>>
s=input()
ls = sorted(list(set(s)))
ns = ''
for i in ls:
n = s.count(i)
ns += f'{i}{n}'
print(ns)
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
以前刷过这道面试题,没有上面那位老兄的简单,我直接贴代码,方法比较笨,参考一下学个思路吧
import re
data=input('请输入字母:') # abbcddd
data1=list(data)
res=[]
for i in data1:
res.append(re.compile(i).findall(data))
# print(res) # [['a'], ['b', 'b'], ['b', 'b'], ['c'], ['d', 'd', 'd'], ['d', 'd', 'd'], ['d', 'd', 'd']]
res1=[]
for i in res:
if i not in res1:
res1.append(i)
print(res1) # [['a'], ['b', 'b'], ['c'], ['d', 'd', 'd']]
res2=[]
for i in res1:
res2.append(str(len(i)))
print(res2) # ['1', '2', '1', '3']
result=[]
for i in range(len(res1)):
result.append(res1[i][0])
result.append(res2[i])
print("".join(result)) # a1b2c1d3
很明显后面的数字就是相对应字符的个数,可以先统计出来然后输出
s='aaabbcdddddeeffg'
a={}
for i in s:
a[i]=a.get(i,0)+1 #得到统计字典
for i in a:
print(i+str(a[i]),end='') #然后输出,end='',不换行输出