删除Python中的重复字母

San*_*r B 1 python string

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

试了这个没有成功..

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
Run Code Online (Sandbox Code Playgroud)

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

input: lloolleellaa
outpu: lolela
Run Code Online (Sandbox Code Playgroud)

roy*_*g86 5

它与所有语言的逻辑相同.这是在采访中经常提出的问题.基本上,您将字符串的每个字符分配给数据结构.数据结构的选择与语言和性能不同.有时他们也可能会询问订单是否重要.

>>> foo = 'haalllooo'
>>> ''.join(sorted(set(foo), key=foo.index))
'halo'
Run Code Online (Sandbox Code Playgroud)


Dan*_* D. 5

删除相邻的相同项目可以通过以下方式完成groupby:

>>> import itertools
>>> ''.join(c[0] for c in itertools.groupby('haalllooo'))
'halo'
Run Code Online (Sandbox Code Playgroud)

这只需要每组相同项目的头部.

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

仅按顺序保留唯一项目:

def unique(it):
    s = set()
    for x in it:
        if x not in s:
           s.add(x)
           yield x
Run Code Online (Sandbox Code Playgroud)

这可以这样使用:

>>> ''.join(unique('haalllooo'))
'halo'
>>> ''.join(unique('haalllooo thheeerrree tttthhhiiisss iiisss aaann eeeexxxaaammpppllleee'))
'halo terisnxmp'
Run Code Online (Sandbox Code Playgroud)