Python-删除字符串中的重复字母

标签 python string letter

假设我有一个按字母顺序排列的字符串,基于字母重复的次数。

  • 示例:“BBBAADDC”。

有 3 个 B,因此它们位于开头,2 个 A 和 2 个 D,因此 A 位于 D 之前,因为它们按字母顺序排列,还有 1 个 C。另一个例子是 CCCCAAABBDDAB。

请注意,中间某处可以有 4 个字母(即 CCCC),因为可能有 2 对 2 个字母。

但是,假设我只能连续有 n 个字母。例如,如果第二个示例中的 n = 3,那么我必须从 4 个 C 的第一个子字符串中省略一个“C”,因为一行中最多只能有 3 个相同的字母。

另一个例子是字符串“CCDDDDAABC”;如果n = 2,我必须删除一个C和一个D才能得到字符串CCDDAABC

输入/输出示例:

  1. n=2:输入:AABBCCCCDE,输出:AABBCCDE
  2. n=4:输入:EEEEFFFFGGG,输出:EEEEFFFFGGG
  3. n=1:输入:XXYYZZ,输出:XYZ

我怎样才能用Python做到这一点?提前致谢!

这就是我现在所拥有的,尽管我不确定它是否在正确的轨道上。这里,z是字符串的长度。

for k in range(z+1):
        if final_string[k] == final_string[k+1] == final_string[k+2] == final_string[k+3]: 
            final_string = final_string.translate({ord(final_string[k]): None})
return final_string

最佳答案

好的,基于on your comment ,您要么对字符串进行预排序,要么不需要按您尝试创建的函数进行排序。您可以使用itertools.groupby()更轻松地做到这一点:

import itertools

def max_seq(text, n=1):
    result = []
    for k, g in itertools.groupby(text):
        result.extend(list(g)[:n])
    return ''.join(result)


max_seq('AAABBCCCCDE', 2)
# 'AABBCCDE'
max_seq('EEEEEFFFFGGG', 4)
# 'EEEEFFFFGGG'
max_seq('XXYYZZ')
# 'XYZ'
max_seq('CCCDDDAABC', 2)
# 'CCDDAABC'

在每个组 g 中,它会被展开,然后切片直到 n 个元素([:n] 部分),这样您就可以获得每个字母最多连续n 次。如果相同的字母出现在其他地方,则在连续计算 n 时将其视为独立序列。


编辑:这是一个较短的版本,对于很长的字符串也可能表现更好。当我们使用 itertools 时,这个工具还使用 itertools.chain.from_iterable()创建扁平的字母列表。由于每个都是生成器,因此仅在最后一行评估/扩展:

import itertools

def max_seq(text, n=1):
    sequences = (list(g)[:n] for _, g in itertools.groupby(text))
    letters = itertools.chain.from_iterable(sequences)
    return ''.join(letters)

关于Python-删除字符串中的重复字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66510486/

相关文章:

java - 使用 Python 正则表达式解析 Java Arrays.deepToString 输出的浮点字符串

python - 生成随机文件名安全和 URL 安全字符串

python - 在python调试中计算单词中的字母

前八个字母和最后一个数字的正则表达式

python - 我如何要求对/admin 路径下的任何内容进行身份验证?

python - 如何(或为什么不)从子类调用 unicode.__init__

python - 创建自定义数据集

python - 从 setuptools 包中排除顶级目录

c - 如何从 stdin 获取在 C 中具有前导空格的字符串输入?

html - 在 HTML 输入中增加数字而不是字母