2016-12-05 172 views
0

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

试过这种没有成功..

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 

编辑:误区一:我不想删除所有重复characthers。只要它们按顺序重复。

input: lloolleellaa 
outpu: lolela 
+0

可以添加样本输出和输入。 – harshil9968

+0

@ harshil9968检查帖子的第一行。 –

+0

请参阅http://stackoverflow.com/a/9841401/3832970 –

回答

4

这与所有语言的逻辑相同。在采访中这是一个经常被问到的问题。基本上你可以将字符串的每个字符分配给一个数据结构。数据结构的选择不同于语言和性能。有时他们也可能会问这个命令是否重要。

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

这简单地取各等于项的组中的头:

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

http://stackoverflow.com/a/9841401/3832970, –

+0

的复制参见编辑,我以不好的方式写了这个问题。 –

+0

@SanderB然后Dan D.提供的解决方案可以满足您的需求。 – Keiwan

5

卸下相邻等于项可以与groupby如下进行。

>>> ''.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' 
+0

您应该考虑将此添加为重复的答案。在这个问题上还没有表现出只删除相邻物品的解决方案。 –