Day to_day

[정렬하기] sort와 sorted 차이와 활용 본문

Python

[정렬하기] sort와 sorted 차이와 활용

m_inglet 2022. 9. 15. 11:40
728x90
반응형

정렬하기

sort와 sorted의 차이

리스트를 제자리에서(in-place) 수정하는 내장 list.sort() 메서드

sorted(list)는 새로운 정렬된 리스트를 만드는 내장 함수

 

 

list.sort()


리스트를 제자리에서 수정하며, 원래 목록이 필요 없는 경우 효율적으로 사용할 수 있음

 

기본 예시 코드

A = [5, 9, 2, 1]
A.sort()
print(A)
# [1, 2, 5, 9]

 

그러나 sort() 메서드의 경우 리스트를 제자리에서 수정하기 때문에 새로운 리스트를 선언 후 print하면 None 을 반환

A = [5, 4, 5, 9, 1]
A_sorted = A.sort()
print(A_sorted)
# None

 

 

sorted(list)


기본 예시 코드

sorted_list = sorted([3,2,4,5])
print(sorted_list)
# [2,3,4,5]

 

list.sort()와 다른 점은 sort()는 리스트 요소에 대해서만 적용이 되지만 sorted() 함수는 모든 이터러블을 받아들인다.

sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
# [1, 2, 3, 4, 5]

 

또한 여러 옵션을 주어 정렬 할 수도 있다.

 

 

복잡한 객체를 하나의 값을 기준으로 정렬하고 싶을 때 : sorted()

cafe_menu = [
	('americano', 1500, 'hot'),
	('latte', 2500, 'hot'),
	('iced tea', 3000, 'iced'),
	('lemon ade', 2700, 'iced')
]

sorted_menu = sorted(cafe_menu, key=lambda menu: menu[1]) # sort by price
print(sorted_menu) 
# [('americano', 1500, hot), ('latte', 2500, hot),('lemon ade', 2700, iced),('iced tea', 3000, iced)]

 

sorted()를 사용할 때 key 매개변수를 갖고있는데 다른 부분은 쉽게 이해되는데

key=lambda 부분을 어떻게 해석해야 할 지 몰라서 더 찾아보았다.

 

※ lambda 함수

이름없는 함수, 람다표현식은 익명 함수라고 생각할 수 있다.

함수를 따로 선언하지 않고 lambda로 대체 할 수 있는 것

f = lambda x : x+1

이런식으로 사용할 수 있다.

 

 

복잡한 객체를 하나의 값을 기준으로 정렬하고 싶을 때 : list.sort()

cafe_menu = [
	('americano', 1500, 'hot'),
	('latte', 2700, 'hot'),
    ('latte', 3000, 'iced'),
	('iced tea', 3000, 'iced'),
	('lemon ade', 2700, 'iced')
]

cafe_menu.sort(key=lambda menu: (menu[0], menu[1])) # sort by name and price
print(cafe_menu)
# [('americano', 1500, 'hot'), ('iced tea', 3000, 'iced'), ('latte', 2700, 'hot'),
# ('latte', 3000, 'iced'), ('lemon ade', 2700, 'iced')]

다음 예시는 sort()를 이용해서 첫 번째 예시를 응용해본 것.

menu: (menu[0], menu[1])로 만들어서 첫 번째 요소인 메뉴이름이 중복일 경우 다음으로 price를 비교해서 더 싼 가격 먼저 나열 하도록 한다.

물론 람다함수 안에서 menu : -menu[1] 과 같이 쓴다면 역순으로 정렬가능하다.

 

 

오름차순 내림차순

기본 default 값은 오름차순인데 내림차순으로 값을 얻으려면 reverse 매개변수를 이용한다.

A = [1,3,5,2,1,6]
sorted_A = sorted(A, reverse=True)
print(sorted_A)
# [6,5,3,2,1,1]
A = [1,3,5,2,1,6]
A.sort(reverse=True)
print(A)
# [6,5,3,2,1,1]
728x90
반응형
BIG
Comments