티스토리 뷰

프로그래밍/Python

Python 정렬 기초

Redirect 2024. 1. 15. 13:23
728x90

1. 정렬 기초

- 오름차순 정렬은 "sorted()" 함수를 호출하여 사용하면 됩니다. "sorted()" 함수는 정렬된 리스트를 반환합니다.
- "list.sort()" 메소드를 사용할 수도 있지만, 해당 함수는 리스트를 제자리에서 수정합니다.
- "list.sort()" 메소드와의 차이점은 모든 이러터블의 함수에 적용할 수 있다는 점 입니다.


728x90


2. 키 함수

- "list.sort()" 와 "sorted()" 는 각 리스트 요소에 대해 정렬할 기준을 정하는 key 매개 변수를 가지고 있습니다.
- 리스트에서 사용 시, 다음과 같이 문자열 비교를 통해 정리할 수 있습니다.

예) sorted("This is a test string from Andrew".split(), key=str.lower)
>>> [ 'a', 'Andrew', 'from', 'is', 'string', 'test', 'This' ]


- 키와 값으로 정의되는 딕셔너리와 튜플에서는 키 또는 값으로 정렬할 수도 있습니다.

예) student_tuples = [ ('John', 'A', 15), ('Jane', 'B', 12), ('Dave', 'B', 10) ]
sorted(student_tuples, key=lambda student: student[2])
>>> [ ('Dave', 'B', 10), ('Jane', 'B', 12), ('John', 'A', 15) ]
sorted(student_object, key=lambda student: student.age) # 객체로 이뤄져있다는 가정
>>> [ ('Dave', 'B', 10), ('Jane', 'B', 12), ('John', 'A', 15) ]






3. operator 모듈 함수

from operator import itemgetter, attrgetter

- "key" 함수에 명시적으로 값을 넣어도 되지만, "itemgetter" 또는 "attrgetter" 함수를 이용하면 더욱 쉽고 빠르게 제작이 가능합니다.

예)
sorted(student_tuples, key=itemgetter(2))
>>> [ ('Dave', 'B', 10), ('Jane', 'B', 12), ('John', 'A', 15) ]
sorted(student_object, key=attrgetter('age'))
>>> [ ('Dave', 'B', 10), ('Jane', 'B', 12), ('John', 'A', 15) ]


- operator 모듈 함수는 여러 기준으로 정렬이 가능합니다. 아래 예시는 grade로 먼저 정렬하고 그 다음 age로 정렬한 예제 입니다.

예)
sorted(student_tuples, key=itemgetter(1,2))
>>> [ ('John', 'A', 15), ('Dave', 'B', 10), ('Jane', 'B', 12) ]
sorted(student_object, key=attrgetter('grade', 'age'))
>>> [ ('John', 'A', 15), ('Dave', 'B', 10), ('Jane', 'B', 12) ]





4. 오름차순과 내림차순


- "key" 매개변수를 통해 정렬할 기준을 설정했다면, "reverse" 매개변수를 통해 정렬의 방향인 오름차순/내림차순을 설정할 수 있습니다.
- default 값은 오름차순이며, reverse=True 로 지정하면 내림차순으로 정렬합니다.

예)
sorted(student_tuples, key=itemgetter(2), reverse=True)
>>> [ ('John', 'A', 15), ('Dave', 'B', 10), ('Jane', 'B', 12) ]




 


5. 정렬 안정성과 복잡한 정렬


- 정렬할 때, 만약 여러 레코드가 같은 값을 가진다면 원래 순서가 유지됩니다.
- 따라서 만약 student 데이터를 grade의 내림차순으로 정렬한 다음, age의 오름차순으로 정렬하려고 하면, 먼저 age로 정렬한 다음 grade를 사용하여 정렬해야 합니다.

예)
s = sorted(student_object, key=attrgetter('age'))
sorted(s, key=attrgetter('grade'), reverse=True)
>>> [ ('Dave', 'B', 10), ('Jane', 'B', 12), ('John', 'A', 15) ]
728x90

'프로그래밍 > Python' 카테고리의 다른 글

[Python] set을 활용한 집합 연산  (0) 2024.05.02
자료구조 기초 (리스트 사용)  (0) 2024.01.17
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크