2016-11-06 2 views
0
def last_name(str): 
    return str.split()[1] 

names = ["Isaac Newton", "Fred Newton", "Niels Bohr"] 
print("s:", sorted(names, key=last_name)) 
print("s:", sorted(names, key=last_name, reverse=True)) 

출력 : ['Fred Newton','Isaac Newton', 'Niels Bohr'] :파이썬 역 = 진정한 반전 문제

s: ['Niels Bohr', 'Isaac Newton', 'Fred Newton'] 
s: ['Isaac Newton', 'Fred Newton', 'Niels Bohr'] 

내가 reverse=True 사용, 그것은 다음과 같이 안?

+1

왜 그래야합니까? –

+0

왜? last_name을 (를) 정렬하고 있습니다. Newton = Newton, Fred 대 Isaac의 순서는 부적합합니다. – Daniel

답변

5

파이썬의 정렬 알고리즘은 안정적인입니다. 두 값의 결과가 같으면 상대 순서가 동일하게 유지됩니다. 반전은 에만 적용되며 과 다릅니다.

key('Isaac Newton')key('Fred Newton')은 모두 'Newton'을 생성하므로이 두 문자열은 원래의 상대 순서로 유지됩니다. reverse=True 플래그는 'Bohr''Newton' 전 또는 후에 정렬되는 경우에만 영향을줍니다.

상대 순서가 반대로 필요한 경우 으로 전달한 다음 결과 목록을 반대로 지정하십시오.