文字列内のすべての母音を見つけて置き換えようとしています。
これが私が取り組んできたものです:
word = "abcde"
vowels = "aeiou"
v = list(vowels)
hey = False
for i in range(len(word)):
if word[i] == v:
hey = True
print hey
これらすべての位置を記号「$」の文字列に置き換えようとしましたが、この線形検索を適切に実行する方法がわかりません。
文字列内のすべての母音を見つけて置き換えようとしています。
これが私が取り組んできたものです:
word = "abcde"
vowels = "aeiou"
v = list(vowels)
hey = False
for i in range(len(word)):
if word[i] == v:
hey = True
print hey
これらすべての位置を記号「$」の文字列に置き換えようとしましたが、この線形検索を適切に実行する方法がわかりません。
これがある種の割り当て/クラスに対するものであるという仮定の下で、ここに簡単な例があります。文字列を文字ごとに繰り返すことができるので、これは母音セットの各文字を調べ、単語の各インスタンスを文字に置き換えます$
。
In [33]: s = 'abcde'
In [34]: for c in 'aeiou':
....: s = s.replace(c, '$')
....:
....:
In [35]: s
Out[35]: '$bcd$'
そして、それを単純に保ち、逆にそれを行うには:
In [6]: s = 'abcde'
In [7]: replace = ''
In [8]: for c in s:
...: if c not in 'aeiou':
...: replace += c
...:
...:
In [9]: for c in replace:
...: s = s.replace(c, '$')
...:
...:
In [10]: s
Out[10]: 'a$$$e'
これは、これを1行または2行で処理できる他の多くの非常に優れた関数には入りませんが、ビルディングブロックとして機能することを願っています:)
"".join(("$" if char in vowels else char) for char in string)
正規表現を使用するのがおそらく最も簡単です。
(?i)
大文字と小文字を区別しない比較を行う
[aeiou]
ことは、a、e、i、o、またはuのいずれかを意味します
残りはかなり明白です
import re
s = 'alpha beta charlie delta echo foxtrot golf hotel'
print re.sub('(?i)[aeiou]', '$', s)
# $lph$ b$t$ ch$rl$$ d$lt$ $ch$ f$xtr$t g$lf h$t$l
それ、またはstr.translate
:
from string import maketrans
to_dollar = 'aeiouAEIOU'
trans = maketrans(to_dollar, '$' * len(to_dollar))
print s.translate(trans)
# $lph$ b$t$ ch$rl$$ d$lt$ $ch$ f$xtr$t g$lf h$t$l
それ、またはdict
:を使用して
lookup = dict.fromkeys('aeiouAEIOU', '$')
print ''.join(lookup.get(c, c) for c in s)
# $lph$ b$t$ ch$rl$$ d$lt$ $ch$ f$xtr$t g$lf h$t$l
セットを使用して、繰り返し処理している文字が母音であるかどうかをすばやく判断できます。セットオブジェクトは(通常)リストのような線形ルックアップ時間ではなく、一定のルックアップ時間を持っています。
vowels = set(vowels)
''.join('$' if ch in vowels else ch for ch in string)
word = "a quick brown fox"
vowels = list("aeiou")
hey = False
for w in word:
hey = hey or w in vowels
print hey