2014-06-11 1 views
2

내가다른 항목과 일치하도록 항목을 정렬하는 방법은 있지만 다른 곳에서 정렬을 적용하는 방법은 무엇입니까? 예를 들어

LEAST HDKEN 

지금 내가 훔쳐 LEAST 재 배열 말하는 단어와 임의의 문자열을 말한다. 두 번째 단어에 똑같은 "변형"을 적용하고 싶습니다. L 개의 (제 1 캐릭터) 하나의 단부 (의 도둑질)에 가니 때문에

STEAL ENDKH 

는 문자열 (H)의 첫번째 문자 따라서뿐만 아니라 끝 위치로 진행한다. 나머지는 비슷합니다.

+0

중복 문자가있을 때 무슨 일? – Fabricator

답변

3

두 개의 문자열을 함께 압축하면 문자 쌍을 정렬 할 수 있습니다. 그런 다음 정렬하고 압축을 풉니 다.

>>> zip(*sorted(zip('LEAST', 'HDKEN'), key=lambda s:'STEAL'.index(s[0]))) 
[('S', 'T', 'E', 'A', 'L'), ('E', 'N', 'D', 'K', 'H')] 

또는, 조금 더 :

# Make pairs of letters 
pairs = zip('LEAST', 'HDKEN') 
# Sort pairs, using the index into STEAL as the sort key 
sortedpairs = sorted(pairs, key=lambda s:'STEAL'.index(s[0])) 
# Unzip the pairs back into words 
result = zip(*sortedpairs) 
# Print the words 
print ''.join(result[0]), ''.join(result[1]) 

(인쇄 원하는 STEAL ENDKH)

+0

나는 기술적으로 ENDKH를 원한다. 그러나 이것은 놀랍다. 이게 어떻게 작동합니까? – KaliMa

+0

@KaliMa : 나는 약간의 설명을 덧붙였다. – nneonneo

+0

나는 zip과 unzip을 이해하고, 정렬 키의 기본을 이해하지만 왜 'STEAL'.index (s [0])입니까? – KaliMa

관련 문제