티스토리 뷰

 

파이썬 정렬함수

파이썬 정렬함수들은 기본적으로 정수형이면 크기순, 문자형이면 사전순으로 정렬한다.

 

1. sort()

<리스트>.sort(key=<함수>, reverse=<bool>)

 

sort()의 매개변수인 key, reverse 값을 정의하지 않으면 기본적으로 reverse=False 오름차순 정렬이다.

sort() 함수는 기존 데이터를 변경하는 방식으로 반환한다.

 

다음은 정수형오름차순, 내림차순으로 정렬하는 방법이다. 

key 값을 이용하면 특정 조건(절댓값)을 기준으로 정렬할 수 있다.

num_list = [-2,0,4,10,-7]
num_list.sort() # 오름차순 정렬
print(num_list) #[-7, -2, 0, 4, 10]

num_list = [-2,0,4,10,-7]
num_list.sort(reverse=True) # 내림차순 정렬
print(num_list) # [10, 4, 0, -2, -7]

num_list = [-2,0,4,10,-7]
num_list.sort(key=abs) # key 기준으로 오름차순 정렬
print(num_list) # [0, -2, 4, -7, 10]

 

 

다음은 문자형오름차순, 내림차순으로 정렬하는 방법이다. 

key 값을 이용하면 특정 조건(문자열 길이)을 기준으로 정렬할 수 있다.

str_list = ['dddd','bbb','aa','c']
str_list.sort() # 오름차순 정렬
print(str_list) #['aa', 'bbb', 'c', 'dddd']

str_list = ['dddd','bbb','aa','c']
str_list.sort(reverse=True) # 내림차순 정렬
print(str_list) # ['dddd', 'c', 'bbb', 'aa']

str_list = ['dddd','bbb','aa','c']
str_list.sort(key=len) # key 기준으로 오름차순 정렬
print(str_list) # ['c', 'aa', 'bbb', 'dddd']

 

 

2. sorted()

sorted(<리스트>, key=<함수>, reverse=<bool>)

 

sort()의 매개변수인 key, reverse 값을 넣지 않으면 기본적으로 reverse=False 오름차순 정렬입니다. sort() 함수는 새로운 리스트를 반환한다.

 

sort() 함수는 기존에 선언한 리스트를 변경하는 형식이지만, 
sorted() 함수는 는 새로운 리스트를 반환하며 기존 리스트를 변경하지 않습니다.

 

 

다음은 숫자형을 절대값을 기준으로 오름차순, 내림차순 정렬하는 방법이다.

key 값을 이용하면 특정 조건(절댓값)을 기준으로 정렬할 수 있다.

num_list = [-2,0,4,10,-7]
sorted_list = sorted(num_list) # 오름차순 정렬
print(sorted_list) #[-7, -2, 0, 4, 10]

num_list = [-2,0,4,10,-7]
sorted_list = sorted(num_list, key=abs) # key를 기준으로 오름차순 정렬
print(sorted_list) # [0, -2, 4, -7, 10]

num_list = [-2,0,4,10,-7]
sorted_list = sorted(num_list, key=abs, reverse=True) # key를 기준으로 내림차순 정렬
print(sorted_list) # [10, -7, 4, -2, 0]

 

 

다음은 문자형을 문자열의 길이순을 기준으로 오름차순, 내림차순 정렬하는 방법이다.

key 값을 이용하면 특정 조건(문자열 길이)을 기준으로 정렬할 수 있다.

str_list = ["aa", "bbb", "c", "dddd"]
sorted_list = sorted(str_list) # 오름차순 정렬
print(sorted_list) #['aa', 'bbb', 'c', 'dddd']

str_list = ["aa", "bbb", "c", "dddd"]
sorted_list = sorted(str_list, key = len) # key를 기준으로 오름차순 정렬
print(sorted_list) #['c', 'aa', 'bbb', 'dddd']

str_list = ["aa", "bbb", "c", "dddd"]
sorted_list = sorted(str_list, key=len, reverse=True) # key를 기준으로 내림차순 정렬
print(sorted_list) #['dddd', 'bbb', 'aa', 'c']

 

 

3. sort(), sorted() + lambda 함수

 

sort sorted를 사용하여 정렬할때,

key 옵션에다가 lambda표현식을 사용하여 정렬할 수 있다.

 

lambda 함수의 사용 방법은 다음과 같다. >> lambda 인자:표현식

 

따라서, sorted(key = lambda x: x, reverse=<bool>) 형식으로 사용할 수 있다.

 

예시를 보면 더 이해하기가 쉬울 것이다.

아래는 2차원 배열을 정렬하는 방법으로, 행(배열의 0번째값) 또는 열(배열의 1번째값) 기준으로 정렬할 수 있다.  행 또는 열 기준으로 정렬하다보면 동일한 값이 있을때 다중조건을 사용하여 key = lambda x:(-x[1], x[0])나타낼 수 있습니다.

 

여기서, 오름차순 때는 옆과 같이 사용하며 key = lambda x:x[1]

내림차순 때는 마이너스를 사용하여 key = lambda x:-x[1] 나타낼 수 있다. (물론, reverse 사용 가능)

list = [[1,2], [3,1], [2,3],[2,2],[3,2]]

# 1. 기본적인 sorted() 함수 사용
sorted_list = sorted(list)
print(sorted_list) # [[1, 2], [2, 2], [2, 3], [3, 1], [3, 2]]

# 2. 2차원 배열의 0번째 값을 기준으로 오름차순
sorted_list = sorted(list,key=lambda x:x[0])
print(sorted_list) # [[1, 2], [2, 3], [2, 2], [3, 1], [3, 2]]

# 3. 2차원 배열의 1번째 값을 기준으로 오름차순
sorted_list = sorted(list,key=lambda x:x[1])
print(sorted_list) # [[3, 1], [1, 2], [2, 2], [3, 2], [2, 3]]

# 4. 2차원 배열의 1번째 값을 기준으로 내림차순
sorted_list = sorted(list,key=lambda x:-x[1])
print(sorted_list) # [[2, 3], [1, 2], [2, 2], [3, 2], [3, 1]]

# 5. 2차원 배열의 1번째 값(열)을 기준으로 오름차순 정렬하다가
#    같은 값이 있다면 배열의 0번째 값이 내림차순으로 정렬
sorted_list = sorted(list,key=lambda x:(x[1], -x[0]))
print(sorted_list)

 

 

+ dictionary 정렬

lambda를 이용하여 dictionary도 정렬가능하다.

 

다음은 딕셔너리 키를 이용하여 정렬한 예제이다.

dic = [
{'name':'kwon1', 'age':27},
{'name':'kwon3', 'age':29},
{'name':'kwon2', 'age':30}
]

sorted_dic = sorted(dic, key = lambda x: x['name'])
print(sorted_dic) # [{'name': 'kwon1', 'age': 27}, {'name': 'kwon2', 'age': 30}, {'name': 'kwon3', 'age': 29}]

sorted_dic = sorted(dic, key = lambda x: x['age'])
print(sorted_dic) # [{'name': 'kwon1', 'age': 27}, {'name': 'kwon3', 'age': 29}, {'name': 'kwon2', 'age': 30}]

 


다른 딕셔너리 정렬 예제이다.

dict = {
       2: 3,
       1: 3,
       3: 5,
       6: 3,
       5: 2
}

# 딕셔너리의 키값들을 기준으로 정렬하며 키값을 출력
print(sorted(dict.keys(), key=lambda x: x))

# 딕셔너리의 value값들을 기준으로 정렬하며 value값을 출력
print(sorted(dict.values(), key=lambda x: x))

# 딕셔너리의 키값들을 X에 넣어, dict[x] 즉 dict의 value 기준으로 정렬하며 key값을 출력.
print(sorted(dict, key=lambda x: dict[x]))

# 딕셔너리의 키,값 쌍들을 매개변수 x에 넣어 키값 정렬하여 출력
print(sorted(dict.items(), key=lambda x: x[0]))
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함