List를 정렬하기 위해 Python에서는 두 가지 방법을 제공합니다.
방법 1. List의 내장 함수인 list.sort를 사용하여 정렬합니다.
list.sort(func=None, key= None, reverse =False)
Python 예:
>>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> list.sort() >>> list [2, 3, 5, 8, 9]
방법 2. 시퀀스 유형 함수 sorted(list)를 사용하여 정렬( 시작 2.4)
Python 예:
>>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> sorted(list) [2, 3, 5, 8, 9]
두 메서드의 차이점:
sorted(list) 반환 표현식으로 사용할 수 있는 객체입니다. 원래 목록은 변경되지 않고 유지되며 새로운 정렬된 목록 개체가 생성됩니다.
list.sort()는 객체를 반환하지 않고 원래 목록을 변경하지 않습니다.
기타 정렬 예:
예 1: 정방향 정렬
>>>L = [2,3,1,4] >>>L.sort() >>>L >>>[1,2,3,4]
예 2: 역방향 정렬
>>>L = [2,3,1,4] >>>L.sort(reverse=True) >>>L >>>[4,3,2,1]
예 3: 두 번째 키워드 정렬
>>>L = [('b',6),('a',1),('c',3),('d',4)] >>>L.sort(lambda x,y:cmp(x[1],y[1])) >>>L >>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
예 4: 두 번째 키워드 정렬
>>>L = [('b',6),('a',1),('c',3),('d',4)] >>>L.sort(key=lambda x:x[1]) >>>L >>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
예 5: 두 번째 키워드 정렬
>>>L = [('b',2),('a',1),('c',3),('d',4)] >>>import operator >>>L.sort(key=operator.itemgetter(1)) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
예6: (DSU 방식: Decorate-Sort-Undercorate)
>>>L = [('b',2),('a',1),('c',3),('d',4)] >>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort >>>A.sort() >>>L = [s[2] for s in A] >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
위와 같이 List를 정렬하는 방법은 6가지가 있는데, 그 중 which 예제 3.4.5.6은 목록 항목
의 특정 항목을 비교 키로 정렬하는 데 사용할 수 있습니다.
효율성 비교:
cmp < DSU < key< DSU < key
실험적 비교를 통해 방법 3은 방법 6보다 느리고 방법 6은 방법 4보다 느리며 방법 4와 방법 5는 기본적으로 동일합니다.
키워드 비교 정렬:
예 7 :
>>>L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:x[1]) >>> L >>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
키워드로 순위 지정,
두 번째 키워드를 기준으로 정렬한 후 첫 번째 키워드를 사용하여 정렬하려는 경우
예시 8:
>>> L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:(x[1],x[0])) >>> L >>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
예 9:
>>> L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=operator.itemgetter(1,0)) >>> L >>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
왜 예를 들어야 할까요? 8 모직물? 그 이유는 튜플을 왼쪽에서 오른쪽으로 비교한 후
이 같으면 두 번째
를 비교하기 때문입니다.