tuple, sort, sorted

zzwwoonn·2022년 5월 17일
0

Algorithm

목록 보기
25/71

알고리즘 풀이에 유용하게 쓰일 튜플(Tuple)과 정렬 메서드에 대해 기록해두려 한다. 지금까지 한번도 튜플을 쓴 적이 없는것 같다.

튜플(tuple)

튜플은 몇 가지 점을 제외하곤 리스트와 거의 비슷하다. 리스트와 다른 점은

  1. 생성자 : 리스트 - [], 튜플 = ()
  2. 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.

따라서 알고리즘 문제를 풀이할 때 그 내부의 값을 바꿀 필요가 없다면? (단순 정렬과 같은 경우) 튜플을 사용하는 게 유리할 수 있겠다. 프로그램이 실행되는 동안 그 값이 항상 변하지 않기를 바란다거나 값이 바뀔까 걱정하고 싶지 않는 경우에 튜플을 사용하면 된다.

하지만 수시로 그 값을 변화시켜야할 경우라면 리스트를 사용해야한다. 실제로 알고리즘 문제를 풀 때는 값을 변화시켜야 하는 경우가 더 많으므로 튜플보다는 리스트를 더 많이 사용한다.

튜플의 요소값을 지우거나 변경하려고 하면 에러가 발생한다.

출처 - 점프 투 파이썬

sort, sorted

파이썬 리스트(List)에는 리스트를 제자리에서(in-place) 수정하는 내장 list.sort() 메서드가 있다. 또한, 이터러블로부터 새로운 정렬된 리스트를 만드는 sorted() 내장 함수가 있다.

list.sort()와 sorted()는 모두 비교하기 전에 각 리스트 요소에 대해 호출할 함수(또는 다른 콜러블)를 지정하는 key 매개 변수를 가지고 있다.

정렬의 기준을 명시할 때 사용한다고 이해하면 된다.

코딩테스트에서는 쓸 수 있는지 모르겠지만..?

from operator import itemgetter

라이브러리를 통해 더 간단하고 빠르게 구현이 가능하며 또한 다중 수준의 정렬을 허용한다.

정렬은 안정적(stable)임이 보장된다.

이를 토대로 BOJ-10814를 한번 풀어보자.

추가로 sort 와 sorted를 사용할 때 주의할 점이 있다.


record = [['21', 'Junkyu'], ['21', 'Dohyun'], ['20', 'Sunyoung']]

print(record)
record = sorted(record, key = lambda x : x[0])
sorted(record, key = lambda x : x[0])
# 아무런 변화 x, 새로운 값 생성했는데 그걸 쓰질 못하니까
print(record)


record2 = [['21', 'Junkyu'], ['21', 'Dohyun'], ['20', 'Sunyoung']]

print(record2)
record2.sort(key = lambda x : x[0])
# 그 값 자체를 변경하니까 이건 괜찮음
# 그대로 출력해도 바뀐 값이 출력됨
print(record2)

sorted 매소드는 정렬된 새로운 리스트를 생성하므로 항상 새로운 변수에 할당해줘야 한다.

0개의 댓글