본문 바로가기
코딩 연습/코딩배우기

[python] 파이썬 sort(), sorted() 알아보기

by good4me 2020. 9. 8.

goodthings4me.tistory.com

 

파이썬 sort()는 원본을 변경시키는 함수인 반면 sorted()는 원본을 변경시키지 않는 정렬 방법의 함수이다.

# 리스트 sort()
ls =  [3, 1, 4, 2]
ls.sort()  # 오름차순이 디폴트임
print(ls)  # [1, 2, 3, 4] 원본 변경시킴

ls =  [3, 1, 4, 2]
ls.sort(reverse = True)  # 내림차순
print(ls)


lt = [('yoon', 33), ('lee', 35), ('park', 29)]
lt.sort()
print(lt)  # [('lee', 35), ('park', 29), ('yoon', 33)] 이름 순
lt.sort(reverse = True)
print(lt)  # [('yoon', 33), ('park', 29), ('lee', 35)] 이름 역순


# 나이로 정렬하는 sort() 만들기
# 리스트에 저장된 튜플을 인자로 전달받아 나이를 반환하는 함수를 sort()에 key로 전달
lt = [('yoon', 33), ('lee', 35), ('park', 29)]

def age(tu):
    return tu[1]  # 이름 반환은 tu[0]

lt.sort(key = age)
print(lt)  # [('park', 29), ('yoon', 33), ('lee', 35)]
lt.sort(key = age, reverse = True)
print(lt)  # [('lee', 35), ('yoon', 33), ('park', 29)]
# lambda 함수 사용해도 됨
lt.sort(key = lambda t: t[1])  # 이름은 lambda t: t[0]
print(lt)  # [('park', 29), ('yoon', 33), ('lee', 35)]


# 문자열 길이로 정렬하기
lss = ['Julia', 'Yoon', 'Steeven', 'lee']
lss.sort(key = len)
print(lss)  # ['lee', 'Yoon', 'Julia', 'Steeven']


# 리스트에 저장된 튜플 정렬하기
ltnums = [(3, 1), (2, 9), (0, 5), (4, 3)]
ltnums.sort(key = lambda t: t[0] + t[1], reverse = True)
print(ltnums)  # [(2, 9), (4, 3), (0, 5), (3, 1)] / 합계 내림차순



# 원본이 변하지 않는 sorted()
ltd = [('yoon', 33), ('lee', 35), ('park', 29)]
cpy = sorted(ltd, key = lambda t: t[1])
print(cpy)  # [('park', 29), ('yoon', 33), ('lee', 35)]
print(ltd)  # [('yoon', 33), ('lee', 35), ('park', 29)]


# sort() 함수 못 쓰는 튜플을 sorted()를 사용하여 정렬하기
tu = (3, 1, 2, 4)
#tu.sort() # AttributeError: 'tuple' object has no attribute 'sort'
tcpy = sorted(tu)
print(tcpy)  # [1, 2, 3, 4] / 리스트로 반환
print(tuple(sorted(tu)))  # (1, 2, 3, 4)

# 튜플의 숫자문자열 정렬
org = ('412', '214', '197', '398')
t_cpy = tuple(sorted(org, key = lambda t: int(t[0])))
print(t_cpy)  # ('197', '214', '398', '412')

good4me.co.kr

 

[참고자료] 윤성우의 열혈파이썬 중급편

 

 

댓글