본문 바로가기
Python/Data Structure

[Python]리스트 절대값순으로 정렬하기

by 전봇대파괴자 2021. 2. 11.

 

리스트를 정렬하는 내장함수 중 하나로 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를 추가하면 됩니다.