본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 19. 정렬 기술

출처 : 윤성우의 열혈 파이썬 : 중급

19. 정렬 기술

리스트의 sort 메소드

ns = [3, 1, 4, 2]
ns.sort()                   # 오름차순

ns.sort(reverse = True)     # 내림차순


ns = [('Yoon', 33), ('Lee', 12), ('Park', 29)]
def age(t):
    return t[1]     # 나이 반환

# 매개변수 key에 함수 age를 전달
ns.sort(key = age)  
# 이름의 알파벳 역순으로 정렬
ns.sort(key = lambda t : t[1], reverse = True)


# 문자열의 길이를 기준으로
names = ['Julia', 'Yoon', 'Steven']
names.sort(key = len)

nums = [(3, 1), (2, 9), (0, 5)]
nums.sort(key = lambda t : t[0] + t[1], reverse = True)

sorted 함수 사용하기

org = [('Yoon', 33), ('Lee', 12), ('Park', 29)]
cpy = sorted(org, key = lambda t : t[1], reverse = True)s

print(org)  # 원본
print(cpy)  # 정렬된 사본
  • sort 메소드의 문제점 : 리스트 자체를 수정해버린다
  • sorted 메소드를 사용해 원본은 그대로 두고 정렬된 사본을 얻을 수 있다
org = (3, 1, 2)
cpy = sorted(org)

print(org)  # (3, 1, 2)
print(cpy)  # [1, 2, 3]

# 원본과 동일한 자료형을 유지
cpy = tuple(sorted(org))
print(cpy)  # (1, 2, 3)

# 정렬된 튜플
org = ('321', '214', '197')
cpy = tuple(sorted(org, key = lambda s : int(s[0])))
print(cpy)  # ('197', '214', '321')
  • 튜플은 sort 메소드가 존재하지 않음 : 내용 수정 불가하기 때문
  • 반면, sorted 함수는 iterable 객체면 무엇인든 전달 가능