2016-12-07 13 views
3

ある文字列の文字の各インスタンスを別の文字列の同じインデックスの文字に置きたいとします。そのインデックスに文字が存在しない場合はそのままにしてください。ここである文字列の特定の文字を同じインデックスの別の文字の文字とエレガントに置き換える方法はありますか?

はリスト内包(Pythonの3)と私のソリューションです:

string1 = "food is delicious" 
string2 = "orange is not delicious" 
string3 = "".join([string2[i] if i<len(string2) and c=="o" else c for i, c in enumerate(string1)]) 
print(string3) 

結果

frad is delicidus 

何とかstr.replaceを使用して、たとえば、しかしより良い方法があるはずのようにそれは感じています。何か案は?

答えて

2

itertools.zip_longestを使用すると、両方の文字列を繰り返し、その中で最長の文字列を使い切るまで行うことができます。小さい文字列は、fillvalue

>>> s1 = "food is delicious" 
>>> s2 = "orange is not delicious" 

>>> from itertools import zip_longest 
>>> "".join([c2 if (c1 == 'o' and c2) else c1 for c1, c2 in zip_longest(s1, s2, fillvalue='')]) 
'frad is delicidus' 
1

私が見つけた最短ソリューション:それ以外の場合は、で残りo Sを交換するためにどのような未定義されるため、結果の文字列は、2の短い方の長さを持つことを

a="food is delicious" 
b="orange is not delicious" 
''.join(y if x is 'o' else x for (x, y) in zip(a, b)) 
>>>> frad is delicidus 

注意。

+3

**で満たされます**オブジェクトを比較するのに 'is'を使用しないでください。 – thefourtheye

+0

また、 'a'が' b'よりも長い場合、これは機能しません。 – thefourtheye

関連する問題