2016-12-05 2 views
0

文字列内の繰り返し文字を削除するにはどうすればよいですか?誤解:私はすべての繰り返しcharacthersを削除したくない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 

EDITこれをしようとしました。それらが順番に繰り返されるだけです。

input: lloolleellaa 
outpu: lolela 
+0

あなたがサンプル出力と入力を追加することができます。これは、このように使用することができます

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

を。 – harshil9968

+0

@ harshil9968投稿の最初の行を確認します。 –

+0

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

答えて

4

すべての言語と同じロジックです。これはインタビューで頻繁に出される質問です。基本的には、文字列の各文字をデータ構造に割り当てます。データ構造の選択は、言語とパフォーマンスとは異なります。場合によっては注文が重要かどうかを尋ねることもあります。

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

これは単に等しいアイテムのグループのそれぞれの頭を取る:groupbyと次のように隣接する同じアイテムを削除

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

を参照してください。http://stackoverflow.com/a/9841401/3832970、 –

+0

編集を参照してください、私は悪い考え方で質問を書いています。 –

+0

@SanderB次に、Dan D.によるソリューションが必要なことを行います。 – Keiwan

5

を行うことができます。

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

ための唯一のユニークなアイテム保つために:

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

これを複製物への回答として追加することを検討する必要があります。隣接するアイテムだけを削除するソリューションはまだその問題には反映されていません。 –

関連する問題