리스트를 정렬하는 내장함수 중 하나로 sorted라는 것이 있습니다. 매우 편리하기 때문에 가장 많이 사용되는 함수 중 하나인데요. 대체적으로는 아래와 같이 오름차순, 내림차순으로 리스트를 정렬할 때 쓰입니다.
sample_li=[2,1,4,3]
# 오름차순 정렬
sample_li=sorted(sample_li)
print(sample_li)
>> [1,2,3,4]
# 내림차순 정렬
sample_li=sorted(sample_li, reverse=True)
print(sample_li)
>> [4,3,2,1]
하지만 이 함수의 key 옵션을 활용하면 절대값 순으로 정렬하는 것도 가능한데요. 절대값이란 정수에서 '-', '+'를 뺀 값을 말합니다. 부호로는 |1|(1의 절대값), |-1|(-1의 절대값)과 같이 표현합니다. 파이썬에서 단일값의 절대값을 찾고 싶을 때는 내장함수 abs를 사용합니다.
# 1의 절대값
abs(1)
>> 1
# -1의 절대값
abs(-1)
>> 1
하나의 값이라면 저렇게 함수를 사용해도 상관없지만, 문제는 리스트처럼 다수의 값을 가진 경우이겠죠? 리스트 안의 값이 몇 개인지도 모르는데 하나 하나 비교하고 정렬하는 것은 생각만 해도 번거로운 일입니다. 다른 방법이 없다면 알고리즘을 이용해야 하겠지만, 늘 더 쉽고 간단한 방법은 없을까 고민하게 되죠. 그리고 sorted 함수에는 이런 고민을 해결해주는 key라는 옵션이 존재합니다.
# 리스트 절대값순으로 정렬하기
sample_li=[-2,-4,3,1,5]
sample_li=sorted(sample_li, key=abs)
print(sample_li)
>> [1, -2, 3, -4, 5]
코드 한 줄로 절대값 정렬이 가능해졌군요! key 옵션에는 절대값 외에도 다른 비교함수를 넣어 그를 기준으로 정렬하는 것도 가능합니다. 예를 하나 들어보겠습니다.
# 리스트 반올림값 크기 순으로 정렬하기(오름차순)
sample_li=[1.5, 1.2, 3.2, 3.5, 2.1]
sample_li=sorted(sample_li, key=lambda x:round(x))
print(sample_li)
>> [1.2, 1.5, 2.1, 3.2, 3.5]
리스트 내 값들을 반올림했을 때, 그 크기를 기준으로 오름차순 정렬했습니다. 내림차순을 하고 싶다면 reverse=True를 추가하면 됩니다.
'Python > Data Structure' 카테고리의 다른 글
[Python] 리스트 두 개로 dict 만들기 (0) | 2021.03.04 |
---|---|
[Python] 리스트 안에서 순열(permutation)과 조합(combination) 활용하기 (0) | 2021.02.25 |
[Python] 이중 리스트 해제하고 1차원 리스트로 만들기 (0) | 2021.02.09 |
[Python]int, float 리스트 값들을 str로 한꺼번에 변환하기 (2) | 2021.02.08 |
[Python]리스트 내 문자열 공백 없애기 (0) | 2021.02.06 |