종우의 삶 (전체 공개)

4 - sort()와 sorted() 본문

일지/코딩 테스트 , Algorithm

4 - sort()와 sorted()

jonggae 2024. 5. 31. 18:23

 

한번쯤은 겪어야할 상황이었다.

 

주어진 리스트를 오름차순이든, 내림차순이든 정렬하는 방법에 대한 내용이다.

 

# 언제 발생 한 일인가?

무의식 적으로 리스트의 값을 오름차순으로 정렬하여 표현하려고 했다.

이를테면 이런식 

print(list.sort())

해보면 알겠지만 이러한 방법은 동작하지 않는다!! 자동완성으로 .sort가 뜨길래 아무생각없이 사용했었다.

그리고 list의 값이 분명 존재하지만 list.sort()를 출력해보면 none이라고 뜬다.

print(list.sort())

print(sorted(list))

 

원하는 출력을 하려면 sorted()라는 함수 안으로 집어넣어야 한다. 이 차이는 무엇일까?

 

---

 

# 어떤 차이가 있는가?

 

우선 둘은 메서드함수의 차이가 있다.

 

list의 sort() 메서드sorted() 함수인 것이다.

 

Java에서는 클래스와 메서드를 구분하여 사용한다. 하지만 자바의 메서드와 파이썬의 메서드는 마냥 같게 생각해서는 안되는 듯 하다. 어쨌든 이런 자바와의 차이점은 나중에 다시 살펴보기로 하자.

 

 

list.sort() 메서드

리스트의 객체 자체를 정렬한다. -> 원본 리스트가 수정됨

반환 값이 none이 된다. -> 정렬된 리스트를 반환하지 않는다.

 

원본 리스트를 수정하기 때문에 print로 list.sort()를 출력하려 하면 아무것도 뜨지 않는다.

정렬은 이미 원본 리스트에 적용되었기 때문에 sort()를 적용하고 기존의 list를 출력해야한다.

 

sorted() 함수

원본 리스트를 변경하지 않고, 새로운 리스트를 정렬하여 반환한다.

반환 값이 정렬된 리스트이다.

 

이러한 차이가 있겠다.

 

그렇다면 name이라는 리스트를 아래와 같은 여러 방법으로 출력하면 어떻게 될까?

 

어떤 출력이 나올까?

 

 

!?!?

name = ['o', 'h', 'h', 'e', 'n', 'r', 'i', 'e']

문자로 이루어진 리스트 name이 있다. 

 

name.sort() 자체를 출력하면 none이 나온다. 이미 sort()가 적용되었으므로, 원래 리스트인 name을 출력하면 정렬된 리스트가 출력된다.

 

print로 한번에 출력하고 싶다면, 함수를 사용한 sorted(name)을 출력해주자. 원본 리스트는 은 그대로 다른 곳에서도 쓸 수 있다.

 

이렇게 보면 단순히 원본이 변경되는가의 차이를 찾아 낼 수 있지만, 다른 것도 있었다.

 

list.sort() 는 리스트 객체에만 사용이 가능하지만,

sorted() 함수는 모든 반복가능한 객체들에 사용이 가능했다. 여러모로 쓸모가 많을듯 하고, 직관적으로 사용하기에는 이 함수를 사용하는게 편할 것 같다.

 

그리고 두 방법 모드 정렬 기준을 설정하거나, 역순으로 정렬도 가능하니, 비슷하면서도 다른 두 방법이라고 할 수 있겠다.

 

와~~ 정말 신기하다~~

Comments