【问题标题】:Remove repeated letters in Python删除Python中的重复字母
【发布时间】:2019-02-10 21:49:15
【问题描述】:

如何删除字符串中的重复字母?

试过这个没有成功..

def shorten_string(char_str):
    new=''
    for i in range(0,len(char_str)-1):
       if char_str[i-1] != char_str[i]:
           new += char_str[i]
return new

编辑:误解:我不想删除所有重复的字符。只要它们按顺序重复。

input: lloolleellaa
outpu: lolela

【问题讨论】:

标签: python string


【解决方案1】:

这与所有语言的逻辑相同。这是面试中经常被问到的问题。基本上,您将字符串的每个字符分配给一个数据结构。数据结构的选择因语言和性能而异。有时他们可能还会询问订单是否重要。

>>> foo = 'haalllooo'
>>> ''.join(sorted(set(foo), key=foo.index))
'halo'

【讨论】:

  • 查看编辑,我猜我写的问题很糟糕。
  • @SanderB 然后 Dan D. 的解决方案可以满足您的需求。
  • 在我意识到它实际上有一个主要错误,即删除 所有 个重复的字母,而不仅仅是彼此相邻的字母之前,我对此表示赞同。当我意识到错误时,已经为时已晚,无法收回赞成票。当心这个答案不能回答问题。
  • 它在罗马乌尔都语案例中也对我有用。谢谢
【解决方案2】:

可以使用groupby 删除相邻的相等项,如下所示:

>>> import itertools
>>> ''.join(c[0] for c in itertools.groupby('haalllooo'))
'halo'

这只是取每组相同项目的首领。

>>> ''.join(c[0] for c in itertools.groupby('haalllooo thheeerrree tttthhhiiisss iiisss aaann eeeexxxaaammpppllleee'))
'halo there this is an example'

只保留唯一的项目:

def unique(it):
    s = set()
    for x in it:
        if x not in s:
           s.add(x)
           yield x

可以这样使用:

>>> ''.join(unique('haalllooo'))
'halo'
>>> ''.join(unique('haalllooo thheeerrree tttthhhiiisss iiisss aaann eeeexxxaaammpppllleee'))
'halo terisnxmp'

【讨论】:

  • 您应该考虑将其添加为副本的答案。该问题尚未提出仅删除相邻项目的解决方案。
【解决方案3】:

我的正则表达式解决方案:

>>> import re

>>> re.compile(r'(.)\1{1,}', re.IGNORECASE).sub(r'\1', "haalllooo thheeerrree tttthhhiiisss iiisss aaann eeeexxxaaammpppllleee")
'halo there this is an example'

但请注意,Dan 的解决方案比正则表达式快 4 倍!

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多