Py学习  »  Python

在python中通过相邻字母计数转换字符串

Soszu98 • 2 年前 • 1049 次点击  

我尝试了很多方法,但都没有成功。我得把字符串转换成 assdggg a2sd3g 在python中。如果字母彼此相邻,我们只留下一个字母,在它之前,我们写下它们中有多少字母相邻。你知道怎么做吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131652
 
1049 次点击  
文章 [ 4 ]  |  最新文章 2 年前
gustavolq
Reply   •   1 楼
gustavolq    2 年前

你可以试试这个:

string = 'assdggg'
compression = ''

for char in string :
    if char not in compression :
        if string.count(char) != 1 :
            compression += str(string.count(char))
        compression += char

print(compression)
#'a2sd3g'
SorousH Bakhtiary
Reply   •   2 楼
SorousH Bakhtiary    2 年前

尝试使用 .groupby() :

from itertools import groupby

txt = "assdggg"

print(''.join(str(l) + k if (l := len(list(g))) != 1 else k for k, g in groupby(txt)))

输出:

a2sd3g
I'mahdi
Reply   •   3 楼
I'mahdi    2 年前

collections.Counter ,那么如果 count_of_char > 1 设置 count 其他设置 '' 如下所示:

>>> from collections import Counter
>>> st = 'assdggg'
>>> cnt_chr = Counter(st)
>>> cnt_chr
Counter({'a': 1, 's': 2, 'd': 1, 'g': 3})

>>> ''.join(f"{'' if cnt==1 else cnt}{c}" for c , cnt in cnt_chr.items())
'a2sd3g'
azro
Reply   •   4 楼
azro    2 年前

我建议 itertools.groupby 然后根据需要格式化

from itertools import groupby

# groupby("assdggg")
# {'a': ['a'], 's': ['s', 's'], 'd': ['d'], 'g': ['g', 'g', 'g']}

result = ""
for k, v in groupby("assdggg"):
    count = len(list(v))
    result += (str(count) if count > 1 else "") + k

print(result)  # a2sd3g