Python的数据类型——集合

任意输入一串纯字母字符串,可以输出字母及数量的另一个字符串,
例如:输入: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]))
分步解答:

  1. 列表推导式建一个纯字母列表

    >>>[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码转字母
    
  2. 查字母个数列表,按条件: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']
    >>> 
    
  3. 合并列表所有元素:

    >>> ''.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)

img

如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

以前刷过这道面试题,没有上面那位老兄的简单,我直接贴代码,方法比较笨,参考一下学个思路吧


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='',不换行输出

img