2017-08-29 12 views
-1
def disemvowel(string): 
    vowels = ('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U') 
    listString = list(string) 
    for t in listString: 
     if t in vowels: 
      listString.remove(t) 
    string = ''.join(listString) 
    return string 

を表示された場合の機能は、すべての母音を削除することになっていると、入力された場合:機能は動作しません母音が連続

'This website is for losers LOL!' 

正しい出力は次のようになります。

'Ths wbst s fr lsrs LL!' 

しかし、私は母音が

すなわち、相互に連続して表示されるようにするには、入力を変更した瞬間

出力('wbsta''losrs'参照)誤っている

'Ths wbsta s fr losrs LL!' 

となります。代わりに母音を除去する

+0

削除中:いいえプラン –

+0

なぜあなたはtを削除していますか? – user8478480

+0

なぜregexが 'ree(" [aeiou] "、" "、string、flags = re.I)のように置き換えられないのですか? –

答えて

4

、なぜ単に母音でない文字から文字列を構築していませんか?

return ''.join([c for c in string if c not in vowels]) 
+0

リスト内包よりもジェネレータは好まれませんか? – Alexander

+1

ないために '(https://github.com/python/cpython/blob/v3.6.2/Objects/unicodeobject.c#L9903)[' str.join'はシーケンスを必要とする]ので、リストの内包が優れているjoin'とシーケンスでない場合はすぐにそれをリスト(追加のオーバーヘッド)に変換します。 @MSeifertコメントに追加するには – MSeifert

+1

舞台裏、 'str.join'がリストに渡されたイテレータを変換しているため、これがあります。ジェネレータを渡すだけで、追加のオーバーヘッドが発生します。あなたの好奇心ならば、実装の詳細は[こちら](https://github.com/python/cpython/blob/master/Objects/stringlib/join.h#L22)見ることができます。 –

1

反復処理中に影響が生じる可能性があるため、反復処理中のアイテムを削除することは一般的にはお勧めできません。そのため、代わりに代わり、は、文字列から母音文字を削除するのは新しい文字列に母音ない文字を追加します。

def disemvowel(string): 
    vowels = ('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U') 
    listString = list(string) 
    string = "" 
    for t in listString 
     if t not in listString 
      string += t 

    return string 
関連する問題