2017-08-21 22 views
0

私が書いたコードで何が起こっているのかを実際に評価するのに役立つ必要があります。Python 3.xx - 文字列から連続した数字/文字を削除する

このように機能するためのものです:

input: remove_duple('WubbaLubbaDubDub') 

output: 'WubaLubaDubDub' 

別の例:

input: remove_duple('aabbccdd') 

output: 'abcd' 

私はまだ初心者です、私が知りたいのですが私のコードで容易と間違っているものを両方それを行う方法。

def remove_duple(string): 
    to_test = list(string) 
    print (to_test) 
    icount = 0 
    dcount = icount + 1 
    for char in to_test: 
     if to_test[icount] == to_test[dcount]: 
      del to_test[dcount] 
      print ('duplicate deleted') 
      print (to_test) 
      icount += 1 
     elif to_test[icount] != to_test[dcount]: 
      print ('no duplicated deleted') 
      print (to_test) 
      icount += 1 
    print ("".join(to_test)) 
+0

[正規表現](https://ideone.com/BpT3NE)でどのようにシンプルに見えるかを見てみましょう。 –

答えて

0

(何が起こっているか視覚化するための私の努力の一環とデバッグそれたコード内のいくつかの行があります)あなたが反復処理されlist(例えばdel to_test[dcount])を変更しないでください。あなたのイテレーターは台無しになるでしょう。これに対処する適切な方法は、希望する値だけを使って新しいlistを作成することです。あなたのコードのための

修正プログラムは次のようになります。一度に2つの文字をスライド、文字列をステップするために探していると

In []: 
def remove_duple(s): 
    new_list = [] 
    for i in range(len(s)-1): # one less than length to avoid IndexError 
     if s[i] != s[i+1]: 
      new_list.append(s[i]) 
    if s:      # handle passing in an empty string 
     new_list.append(s[-1]) # need to add the last character 

    return "".join(new_list) # return it (print it outside the function) 

remove_duple('WubbaLubbaDubDub') 

Out[]: 
WubaLubaDubDub 

、あなたはシフト自体で文字列をするだけでzipでそれを行うことができます1、および2つの文字が等しくない場合は最初の文字を追加して、例えば:

In []: 
import itertools as it 

def remove_duple(s): 
    return ''.join(x for x, y in it.zip_longest(s, s[1:]) if x != y) 

remove_duple('WubbaLubbaDubDub') 

Out[]: 
'WubaLubaDubDub' 

In []: 
remove_duple('aabbccdd') 

Out[]: 
'abcd' 

注:itertools.zip_longest()必要とするか、またはあなたが最後の文字をドロップします。文字列の場合、fillvalueのデフォルト値はNoneです。

+0

すぐにお返事ありがとうございます。 'if:new_list.append(s [-1])' あなたは空文字列が渡された場合に処理するとコメントしましたが、スペースを入れてその行のコードがない空の文字列で、出力は同じでした。このラインは何を正確にしていますか? –

+0

その行がなく、空の文字列 ''''を渡すと 'IndexError'が得られます。 – AChampion

関連する問題