まず、これを行う必要はありません。
vaw = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z']
…文字のシーケンスを取得します。文字列はすでに一連の文字です。(同じことが にも当てはまりますが、そこでは、任意の文字をより長い文字列に置き換えることができる変更可能な文字シーケンスがコードで必要とされるため、がvar1
必要です。)list
また、常に false である とstring == string in vaw
同じであるため、コードは実際には機能しません。True in vaw
私はあなたが意味したと思いますif string in vaw
。変数string
は組み込みモジュールの名前なので、ここでは呼び出しません。
また、標準の Python スタイル (PEP8) で不要とされている場所に余分な空白を追加しないことで、いくつかのキーストロークを節約できます。:)
そう:
def translate(var1):
vaw = 'bcdfghjklmnpqrstvwxz'
var1 = list(var1)
for s in var1:
if s in vaw:
var1[var1.index(s)] = s + 'o' + s
print ''.join(var1)
次に、 の各要素のインデックスが必要な場合はvar1
、それを捨てずに で再度検索しindex
ます。コードが増えて遅くなるだけでなく、複数回出現する要素に対して間違った答えを返すことにもなります。そう:
def translate(var1):
vaw = 'bcdfghjklmnpqrstvwxz'
var1 = list(var1)
for i, s in enumerate(var1):
if s in vaw:
var1[i] = s + 'o' + s
print ''.join(var1)
var
これは、リストをその場で変更したい場合にできる限りのことです。dovar1[i+1:i+1] = 'o' + s
に変更して、既存の要素の後に新しい要素を挿入することもできますが、コピーを反復処理する必要がありvar1
(反復処理中に形状を変更することはできません)、追跡する必要があります。インデックスがどのように変化したかなど。
通常、古い構造をその場で変更するよりも、新しい構造を構築する方がはるかに簡単です。それが、リスト内包表記、ジェネレータ式、map
、filter
などの目的です。s
元のリストの各要素について、それが にある場合、それ以外s + 'o' + s
の場合は必要ですよね? その権利を Python に変換できます。vaw
s
def translate (var1):
vaw = 'bcdfghjklmnpqrstvwxz'
new_var1 = (s + 'o' + s if s in vaw else s for s in var1)
return ''.join(new_var1)