如何删除字符串中重复的字母?
试了这个没有成功..
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)
它与所有语言的逻辑相同.这是在采访中经常提出的问题.基本上,您将字符串的每个字符分配给数据结构.数据结构的选择与语言和性能不同.有时他们也可能会询问订单是否重要.
>>> foo = 'haalllooo'
>>> ''.join(sorted(set(foo), key=foo.index))
'halo'
Run Code Online (Sandbox Code Playgroud)
删除相邻的相同项目可以通过以下方式完成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)