2013-08-10 3 views
1

Q :이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 예를 들어공통 문자 찾기

, 두 값이 "초콜릿"과 "바퀴벌레"다음 기능은 "choa"를 반환해야

RESEARCH 경우 :

내가 찾은 발견() 또는리스트에 만들기 마녀는 기능을 구조화하는 데 도움이됩니다.

코드 : 여기는 내가 문제가있는 곳입니다!

Value1 = input("Please input a word: ") 
Value2 = input("Please input a second word: ") 
[How do I find similar letters in two words] 
print(similar_letters) 

예 :

 
Please input a word: hello 
Please input a second word: hey 
letters in word are : 'he' 
+1

예제가 어떻게 작동하는지 자세히 설명해 주실 수 있습니까? – arshajii

+0

@Christian Careaga 고쳤습니다. – Kelsey

+0

@arshajii 더 많은 정보를 추가했습니다. – Kelsey

답변

4

은 아마 당신은 일반적인 문자를 의미? 만큼 당신이 마음을하지 않는 한 그들이 중복을 제거하고 요소의 순서를 변경하는 것이, 세트를 사용 : (의견 '을 위해 자리에 왼쪽)

s1 = set("chocolate") 
s2 = set("cockroach") 

"".join(s1 & s2) 
=> "ahco" 
+1

오케이, 나 자신에 대해 잘 설명하지 못했습니다. 나는 일을 정리했다. 이것이 제가 목표로 삼은 것입니다. – Kelsey

+0

출력 순서가 마음에 들면' ''.join (sorted ((s1 & s2), key = lambda x : 'chocolate'.index (x)))와 같은 공용 연산 후에 정렬 할 수 있습니다. ' – roippi

+0

Downvoters : _this_는 OP가 원했던 것인데, 당신의 downvotes를 재고 하시겠습니까? –

3

잘못된 원래의 대답을. 많은 경우에 결과가 잘못되었습니다. 특히 샘플 Value1Value2이 치환 될 때 결과가 잘못됩니다. 원하는 결과가 Value1 모두 표시 한 시간보다 더 Value2 출력 문자 표현하는 경우

output= [ x for x in list(Value1) if x in list(Value2) ] 

정확한 답변 (IMHO). 샘플 및 Value1='chocolate'Value2= 'cockroach' 들어

''.join([ x * min(Value1.count(x),Value2.count(x)) for x in sorted(set(Value1) | set(Value2)) ]) 

는 출력 'acchoo'이다 (여기서 임의 장난? :-)). sorted은 문자를 알파벳 순서로 표시하는 기능 만 있습니다 (따라서 정확한 결과 문자열을 안정화시킵니다).

+0

왜 -1일까요? 그것은 당신이 찾고 있던 것과 정확히 일치하지 않지만 "coc"를 복제하여 원하는 답변으로 "choca"를 제공합니다. –

+0

위대한 작품입니다. 이것은 간단하고 훌륭하게 설명하지만, @Mario Rossi는 맞습니다. 저는 편지를 복제하고 싶지 않았습니다. – Kelsey

+2

@MarioRossi 이것은'chocoa'가 아니라'chocoa'를 반환합니다. 또한 나는 불필요한'list()'호출을 싫어하고, 문자열은 이미 반복 가능하다. (나는 downvoter가 아니지만 그의 표를 이해한다.) – roippi