python의 sorted() 함수는 안정성이 보장됩니까?
그 문서가 그것을 보장하지는 않습니다.그것이 문서화된 다른 장소가 있습니까?
목록의 정렬 방법이 안정적으로 보장되기 때문에 안정적일 수도 있다고 생각합니다(참고 9번째 점: "Python 2.3부터, sort() 방법은 안정적으로 보장됩니다."). 그리고 정렬은 기능적으로 유사합니다.하지만 그렇게 말하는 확실한 출처를 찾을 수 없습니다.
목적:두 레코드에서 기본 키가 동일한 경우 기본 키와 보조 키를 기준으로 정렬해야 합니다.sorted()가 안정적이면 보조 키를 정렬한 다음 기본 키를 정렬하여 필요한 결과를 얻을 수 있습니다.
PS: 혼동을 피하기 위해, 저는 "같은 것을 비교하는 요소들의 상대적인 순서를 바꾸지 않는 것이 보장된다면 정렬은 안정적이다"라는 의미에서 안정적인 것을 사용하고 있습니다.
네, 매뉴얼의 의도는 정말로 그것을 보장하는 것입니다.sorted
안정적이고 실제로 그것은 정확히 같은 알고리즘을 사용합니다.sort
방법.저는 문서가 이 신원에 대해 100% 명확하지 않다는 것을 알고 있습니다. 문서 패치는 항상 기쁘게 받아들여집니다!
그들은 안정적입니다.
참고로, 여러 패스 정렬을 단일 패스 정렬로 결합하여 정렬 및 정렬이 안정적인지 여부를 무시할 수도 있습니다.
예를 들어 개체를 기준으로 정렬하려는 경우last_name
,first_name
속성, 한 번에 수행할 수 있습니다.
sorted_list= sorted(
your_sequence_of_items,
key= lambda item: (item.last_name, item.first_name))
튜플 비교를 이용하여
이 대답은 있는 그대로 원래 질문을 다룹니다.정렬 관련 질문에 대한 자세한 내용은 Python Sorting How-To가 있습니다.
그 사이에 문서가 변경되었으며(관련 커밋) 의 현재 문서는 다음을 명시적으로 보장합니다.
빌트인
sorted()
기능이 안정적임이 보장됩니다.동일하게 비교되는 요소의 상대적 순서를 변경하지 않는 경우 정렬은 안정적입니다. 이는 여러 패스(예: 부서별 정렬, 급여 등급별 정렬)로 정렬하는 데 유용합니다.
설명서의 이 부분은 Python 2.7 및 Python 3.4(+)에 추가되었으므로 해당 언어 버전의 호환 구현은 안정적이어야 합니다.sorted
.
CPython list.sort
Python 2.3 이후 안정적인 운영 체제 구축
- 팀 피터스는 그의 작품을 다시 썼습니다.
list.sort()
구현 - 이는 "임의 정렬"(출력에서 동일한 순서로 입력이 표시됨)이며 이전보다 빠릅니다.
100% 확신할 수는 없습니다.sorted
오늘날 그것은 간단히 사용합니다.list.sort
하지만 그 기록은 확인하지 않았습니다.했을 가능성이 높습니다.list.sort
.
Python 3.6 문서 정렬은 다음과 같이 말합니다.
정렬이 안정적임이 보장됩니다.
게다가, 그 문서에는 안정적인 팀소트에 대한 링크가 있는데, 그것은 다음과 같습니다.
Timsort는 버전 2.3부터 Python의 표준 정렬 알고리즘이었습니다.
Python 2.4용 "What's New" 문서는 "공식" 문서는 아니지만 필요한 보장을 제공하면서 먼저 정렬()된 목록을 만든 다음 정렬()을 호출한다는 점을 효과적으로 강조합니다.만약 당신이 정말로 걱정한다면, 당신은 단지 출처를 확인할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/1915376/is-pythons-sorted-function-guaranteed-to-be-stable
'itsource' 카테고리의 다른 글
canvasjs를 사용한 '실시간' 그래프 (0) | 2023.09.04 |
---|---|
jQuery에서 문서가 아닌 부모를 기준으로 위치 값을 사용하여 요소의 "맨 위, 왼쪽" 속성을 설정하려면 어떻게 해야 합니까? (0) | 2023.09.04 |
시스템을 지우는 방법런타임.캐싱.메모리 캐시 (0) | 2023.09.04 |
Git: 추가 vs 푸시 vs 커밋 (0) | 2023.09.04 |
PowerShell에서 전체 화면으로 이동하는 방법 (0) | 2023.09.04 |