2016-12-07 4 views
3

하나의 문자열에있는 문자의 각 인스턴스를 다른 문자열의 동일한 색인에있는 문자로 바꾸고 싶습니다. 해당 색인에 문자가 없으면 그대로 두십시오. 어떻게 든 str.replace를 사용하여 예를 들어,하지만 더 나은 방법이 있어야한다처럼 느낀다하나의 문자열에있는 특정 문자를 동일한 색인의 다른 문자에있는 문자로 우아하게 대체하는 방법은 무엇입니까?

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 

:

여기에 지능형리스트와 내 솔루션 (파이썬 3)입니다. 어떤 아이디어?

답변

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의 대체 무엇을 정의되지 않기 때문에 결과 문자열이 두의 짧은 길이있을 것이라는 점을

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