파이썬을 이용하여 특정 자료형의 데이터를 정렬하고 싶을때 함수를 사용하여 나타낼 수 있습니다.
오늘은 정렬함수들에는 어떤것들이 있고 사용하는 방법에 대해서 정리해보도록 하겠습니다~
파이썬의 정렬함수들은 기본적으로 문자형이라면 사전순으로 정렬하며, 정수형이라면 크기순으로 정렬합니다.
기본적으로 제공되는 내장함수 중 하나이며 괄호안에 오름차순, 내림차순으로 정렬할 수 있습니다.
<리스트>.sort(key=<함수>,revsere=<bool>)
<리스트>.sort()
매개변수(괄호) 안에 값을 넣지 않으면 기본적으로 reverse=False
오름차순 정렬입니다.아래는 문자형을 오름차순으로 정렬하고 정수형은 내림차순으로 정렬하는 방법입니다.
list = ["d", "c", "a", "b"]
list.sort()
print(list) # ['a', 'b', 'c', 'd']
list = [3, 2, 1, 4]
list.sort(reverse=True) # 내림차순 정렬
print(list) # [4, 3, 2, 1]
sorted
도 내장함수 중 하나이며 첫번째에 소개해드린 sort
함수에 매개변수는 동일하지만 특징이 있습니다.
sorted(<리스트>,key=<함수>,revsere=<bool>)
입니다.reverse=False
오름차순 정렬입니다.sort
의 경우 기존에 선언한 리스트를 변경하는 형식이지만 sorted
는 새로운 리스트를 반환하며 기존 리스트를 변경하지 않습니다.아래는 기본적인 오름차순 정렬방법입니다.
list = ["d", "c", "a", "b"]
sorted_list = sorted(list)
print(sorted_list) # ['a', 'b', 'c', 'd']
아래는 문자열의 길이순으로 내림차순 정렬하는 방법입니다.
key 값을 이용하면 특정조건을 기준으로 정렬할 수 있습니다.
list = ["aa", "bbb", "c", "dddd"]
sorted_list = sorted(list,key=len,reverse=True) # 문자열의 길이순으로 내림차순 정렬
print(sorted_list) # ['dddd', 'bbb', 'aa', 'c']
sort
나 sorted
를 사용하여 정렬할때 key 옵션에다가 lambda
표현식을 병행해서 사용하여 정렬하면 특정조건을 만들어 줄 수 있습니다.
lambda 매개변수 : 표현식
입니다.key = lambda x:x[딕셔너리 키], reverse=<bool>
형식으로 매개변수의 키 값을 사용하여 기준을 잡고
오름차순 또는 내림차순으로 정렬할 수 있습니다.
dic = [
{'name':'kwon1', 'age':27},
{'name':'kwon3', 'age':29},
{'name':'kwon2', 'age':30}
]
# 딕셔너리의 name 키 값을 기준으로 내림차순 정렬
sorted_dic = sorted(dic, key = lambda x:x['name'], reverse=True)
print(sorted_dic)
#[{'name': 'kwon3', 'age': 29},
#{'name': 'kwon2', 'age': 30},
#{'name': 'kwon1', 'age': 27}]
아래는 2차원 배열 형태를 정렬하는 방법이며, 2차원 배열형태에서는 행(배열의 0번째값) 또는 열(배열의 1번째값) 기준으로 정렬할 수 있습니다.
오름차순 때는 옆과 같이 사용하며key = lambda x:x[1]
내림차순 때는 마이너스를 사용하여 key = lambda x:-x[1]
나타낼 수 있습니다.
행 또는 열 기준으로 정렬하다보면 동일한 값이 있을때 다중조건을 사용하여 key = lambda x:(-x[1], x[0])
로
나타낼 수 있습니다.
list = [[1,2], [3,1], [2,3]]
# 2차원 배열의 1번째 값(열)을 기준으로 오름차순 정렬
sorted_list = sorted(list,key=lambda x:x[1])
print(sorted_list) # [[3, 1], [1, 2], [2, 3]]
list = [[1,2], [3,1], [2,3]]
# 2차원 배열의 1번째 값(열)을 기준으로 내림차순 정렬
sorted_list = sorted(list,key=lambda x:-x[1])
print(sorted_list) # [[2, 3], [1, 2], [3, 1]]
list = [[1,2], [3,1], [2,3],[2,2],[3,2]]
# 2차원 배열의 1번째 값(열)을 기준으로 내림차순 정렬하다가
# 같은 값이 있다면 배열의 0번째 값이 오름차순으로 정렬
sorted_list = sorted(list,key=lambda x:(-x[1], x[0]))
print(sorted_list) # [[2, 3], [1, 2], [2, 2], [3, 2], [3, 1]]