오늘은 간단하게 기초 알고리즘 문제들을 풀어봤다.
어렵진 않지만 확실히 해둬야 헷갈리지 않을 문법을 정리하고자 한다.
sort와 sorted는 모두 리스트를 정렬해 주는 함수다.
num_list = [5, 8, 2, 7, 3, 6, 9, 0]
def nums(list):
result = list.sort()
print(list)
nums(num_list)
위 코드가 실행되면 [0, 2, 3, 5, 6, 7, 8, 9] 가 나온다.
하지만 sorted를 사용하려면
num_list = [5, 8, 2, 7, 3, 6, 9, 0]
def nums(list):
result = sorted(list)
print(result)
nums(num_list)
이렇게 해야 [0, 2, 3, 5, 6, 7, 8, 9] 가 나온다.
무슨 차이일까?
list.sort() 와 sorted(list)는 단지 표기법만 차이가 있어서 그냥 이렇게 정해진 대로 써야되는구나 하고 넘겼던 내가 혼자 끙끙대다가 결국 서치하여 답을 찾았다.
우선 둘은 같은 값을 출력하지만 코드를 자세히 보면 전혀 다르다.
결론부터 이야기 하자면 sort는 해당 리스트 그 자체를 정렬하는 것이고
sorted는 해당 리스트를 복사하여 정렬하는 것이 차이점이다.
그래서 sort는 result를 print하면 None 값이나온다.sort는 list를 정렬했다. 그리고 그 행위에 result라는 변수 이름을 준 것이다. 그게 끝. 변화가 있었고, 우리가 확인할 건 list지 result라는 변수 값이 아니다.
반면에 sorted. 이건 list를 그대로 복사하고 정렬하여 result의 값이 되게 만들었다. list는 list고 result는 result다. 각 각의 리스트가 된 것이다. 그래서 list를 print하면 [5, 8, 2, 7, 3, 6, 9, 0] 이 나온다.
result를 print하면? [0, 2, 3, 5, 6, 7, 8, 9] 가 나온다. 둘은 이미 서로 다른 리스트로서 각 각 존재하기 때문에!
이걸 이해하면서 함수호출법, 함수리턴법, 함수리턴값사용법에 대해 더 공부해야겠다고 생각했다. 이런식으로 만들어지는 각 함수들이 훨씬 많을 것이고 자연스레 익히게 될 것도 있겠으나 개념적으로 확실히 분리를 해두고 미리 익혀야 받아들이기 훨씬 쉬울 것 같다