정렬 된 컨테이너가 Python에 추가되지 않도록하는 Python 설계 결정 (PEP)이 있습니까?
( OrderedDict
은 삽입 순서로 정렬되어 있으므로 정렬 된 컨테이너가 아닙니다.)
정렬 된 컨테이너가 Python에 추가되지 않도록하는 Python 설계 결정 (PEP)이 있습니까?
( OrderedDict
은 삽입 순서로 정렬되어 있으므로 정렬 된 컨테이너가 아닙니다.)
답변:
그것은 Guido의 의식적인 디자인 결정입니다 (그는 collections
모듈 추가에 대해 다소 주저했습니다 ). 그의 목표는 응용 프로그램을위한 데이터 유형 선택과 관련하여 "한 가지 분명한 방법"을 유지하는 것입니다.
기본 개념은 사용자가 내장 유형이 문제에 대한 올바른 해결책이 아니라는 것을 인식 할만큼 충분히 정교하다면 적절한 타사 라이브러리를 찾는 작업에 달려 있다는 것입니다.
list + sorting, list + heapq 및 list + bisect가 본질적으로 정렬 된 데이터 구조에 의존하는 많은 사용 사례를 다루고 blist와 같은 패키지가 존재한다는 점을 감안할 때이 공간에 더 많은 복잡성을 추가 할 큰 드라이브는 없습니다. 표준 라이브러리.
어떤면에서 그것은 표준 라이브러리에 다차원 배열이 없다는 사실과 유사하며 대신 NumPy 사람들에게 그 작업을 넘깁니다.
collections.Counter
정렬 된 세트로 사용할 수 있습니다. 효율적이지 않을 수 있습니다.
collections.Counter
정렬되지 않았으며 정렬 된 집합을 나타내는 데 적합하지 않습니다.
dict
은 해시 테이블입니다.
정렬 된 목록, dict 및 집합 유형을 구현 하는 python sortedcontainers 모듈 도 있습니다. blist와 매우 유사하지만 pure-Python으로 구현 되며 대부분의 경우 더 빠릅니다 .
>>> from sortedcontainers import SortedSet
>>> ss = SortedSet([3, 7, 2, 2])
>>> ss
SortedSet([2, 3, 7])
또한 다른 패키지에는 일반적이지 않은 기능이 있습니다.
>>> from sortedcontainers import SortedDict
>>> sd = SortedDict((num, num) for num in range(100000))
>>> sd.iloc[-5] # Lookup the fifth-to-last key.
99995
면책 조항 : 저는 sortedcontainers 모듈의 작성자입니다.
도있다 blist의 포함 모듈 의 SortedSet의 데이터 유형 :
sortedset(iterable=(), key=None)
>>> from blist import sortedset
>>> my_set = sortedset([3,7,2,2])
sortedset([2, 3, 7]
파이썬 목록은 정렬되어 있습니다. 정렬하면 그대로 유지됩니다. Python 2.7에서는 OrderedDict
명시 적으로 정렬 된 사전을 유지하기 위해 유형이 추가되었습니다.
파이썬에는 또한 집합 (멤버가 고유해야하는 컬렉션)이 있지만 정의에 따라 순서가 지정되지 않습니다. 집합을 정렬하면 list
.