다양한 정렬 방법


list.sort()

원본 리스트를 정렬하되 반환값은 None (원본 리스트에 영향이 있음)

리스트에만 사용가능

# 오름차순 정렬
a = [8, 10, 6, 1, 12]
a.sort()
print(a)

# 내림차순 정렬
a = [8, 10, 6, 1, 12]
a.sort(reverse=True)
print(a)

# 특정 key 옵션에 따라 정렬, 아래는 원소의 길이
m = ['나는', '파이썬을', '잘하고', '싶다']
m.sort(key=len)
print(m)

Result

[1, 6, 8, 10, 12]
[12, 10, 8, 6, 1]
['나는', '싶다', '잘하고', '파이썬을']



sorted(list)

정렬된 새로운 리스트를 반환 (원본 리스트에 영향이 없음)

이터러블 객체면 활용 가능

a = [8, 10, 6, 1, 12]
print(sorted(a))
print(a)

print(sorted("hello"))

Result

[1, 6, 8, 10, 12]
# 원본에는 영향을 주지 않음을 알 수 있다.
[8, 10, 6, 1, 12]

# 문자열을 정렬한 결과 리스트로 반환함을 확인할 수 있다. 
['e', 'h', 'l', 'l', 'o']



lambda를 사용해 다중 조건 정렬

lambda를 사용해 여러 조건으로 정렬

a = [ ('L', 8), ("L", 6), ("V", 12), ("J", 9), ("P", 1)]
b = sorted(a)
# [('J', 9), ('L', 6), ('L', 8), ('P', 1), ('V', 12)]



# 첫번째 인자(문자)를 기준으로 정렬
c = sorted(a, key=lambda x : x[0])
# [('J', 9), ('L', 8), ('L', 6), ('P', 1), ('V', 12)]

# 두번째 인자(숫자)를 기준으로 정렬
d = sorted(a, key=lambda x : x[1])
# [('P', 1), ('L', 6), ('L', 8), ('J', 9), ('V', 12)]



# 첫번째 인자(문자)를 기준으로 정렬후 같은 경우에는 두번째 인자(숫자)를 기준으로 정렬
e = sorted(a, key = lambda x : (x[0], x[1]))
# [('J', 9), ('L', 6), ('L', 8), ('P', 1), ('V', 12)]

# 첫번째 인자(문자)를 기준으로 정렬후 같은 경우에는 두번째 인자(숫자)를 내림차순으로 정렬
f = sorted(a, key = lambda x : (x[0], -x[1]))
# [('J', 9), ('L', 8), ('L', 6), ('P', 1), ('V', 12)]

정리

  • key인자로 내가 커스텀할 조건 함수를 넣어주면 된다.
  • 비교할 아이템의 요소가 여러개인 경우, 튜플을 사용해 순서를 알려준다.
    • ex. sorted(a, key = lambda x : (x[0], -x[1]))
    • -를 붙이면, 내림차순으로 정렬된다.