뚝딱햄 탈출기

[Python] 리스트 정렬, 역순 정렬 : sort()와 sorted(), reverse()와 reversed(), 슬라이싱, range() 본문

Programming language/Python

[Python] 리스트 정렬, 역순 정렬 : sort()와 sorted(), reverse()와 reversed(), 슬라이싱, range()

hyrmzz1 2023. 10. 4. 22:09

sort()와 sorted()는 정렬 기능을 가진 함수이고, reverse()와 reversed()는 역순 정렬 기능을 가진 함수이다.

sort()

sort() 함수는 리스트의 원소들을 오름차순으로 정렬해주는 함수로, 리스트명.sort() 형식으로 작성한다. 

리스트의 원소들을 내림차순으로 정렬하고 싶을 경우 리스트명.sort(reverse = True) 형식으로 작성하면 된다.

sort() 함수는 리스트형의 메소드로, 리스트 원본값을 직접 수정한다. (리스트를 정렬된 상태로 변경한다.)

sorted()

sorted() 함수는 sorted(리스트명) 형식으로 작성하며, 오름차순 정렬 값을 반환한다.

내림차순 정렬 값을 얻으려면 sorted(리스트명, reverse = True) 형식으로 작성하면 된다. 

sorted() 함수는 내장함수로 정렬 값을 반환하나, 리스트 원본 값은 그대로이다. (기존의 리스트를 변경하는 것이 아닌 정렬의 새로운 리스트를 반환한다. iterator의 요소를 정렬하여 반환한다.)

리스트 뿐 아니라 사전, 튜플 등 다른 iterable 객체도 받을 수 있다.

sort(), sorted() 예제

아래의 중앙값을 구하는 문제를 풀 때 리스트를 오름차순으로 정렬해야 하는데 이 때 sort()와 sorted()를 사용해 풀이할 수 있다.

 

sort() 사용

def solution(array):
    array.sort()    # sort() : 오름차순 정렬
    return array[len(array) // 2]

array.sort() 이후에 array를 return 해보면 원소들이 오름차순으로 정렬되어 반환된다.

리스트 원본 값이 정렬된 상태로 변경되었음을 알 수 있다.

sorted() 사용

def solution(array):
    return sorted(array)[len(array) // 2]

sorted()를 사용하면 []에 인덱스를 작성할 수 있어 정렬 후 원소에 접근하는 걸 코드 한 줄로 해결할 수 있다!

sorted(array) 이후에 array를 return 해보면 정렬되지 않은 상태의 원래의 리스트가 반환된다.

 


reverse()

reverse() 함수는 리스트의 원소들을 역순으로 정렬해주는 함수로, 리스트명.reverse() 형식으로 작성한다. 

sort() 함수와 마찬가지로, reverse() 함수는 리스트형의 메소드이다.

리스트 원본값을 직접 수정한다. (리스트를 역순 정렬된 상태로 변경한다.)

reversed()

reversed() 함수는 reversed(리스트명) 형식으로 작성하며, 역순 정렬 값을 반환한다.

sorted() 함수와 마찬가지로, reversed() 함수는 내장함수이다.

역순 정렬 값을 반환하나,리스트 원본 값은 그대로이다. (기존의 리스트를 변경하는 것이 아닌 역순 정렬의 새로운 리스트를 반환한다. iterator의 요소를 역순으로 정렬하여 반환한다.)

reverse(), reversed() 예제

reverse() 사용

def solution(num_list):
    num_list.reverse()
    return num_list

num_list.reverse() 이후에 num_list를 return 해도 원소들이 역순으로 정렬되어 반환된다.

리스트 원본 값이 정렬된 상태로 변경되었음을 알 수 있다.

reversed() 사용

# 리스트 컴프리헨션 사용
def solution(num_list):
    return [i for i in reversed(num_list)]
# 리스트 컴프리헨션 사용하지 않는다면
def solution(num_list):
    answer = []
    for i in reversed(num_list):
        answer.append(i)
    return answer

reversed(num_list) 이후에 num_list를 return 해보면 역순 정렬되지 않은 상태의 원래의 리스트가 반환된다.

def solution(num_list):
    return list(reversed(num_list))

reversed() 함수는 리스트 메서드가 아닌 파이썬 내장함수이기 때문에 reversed(num_list) 로 반환하면 에러가 발생하므로, list() 함수를 이용해 리스트로 변환해준다.

 

reverse()와 reversed() 함수를 사용하지 않고 리스트를 역순 정렬할 수도 있다.

슬라이싱을 이용한 역순 정렬

a[start : stop : stride]와 같이 슬라이싱할 때, stride를 통해 슬라이스의 간격을 설정한다. (생략시 1)

stride가 음의 정수라면 역방향으로 슬라이싱 하기 때문에, 이를 이용해 리스트를 역순으로 정렬할 수도 있다.

def solution(num_list):
    return num_list[::-1]

range() 이용한 역순 정렬

range() 함수는 for문에서 수를 차례대로 나열할 때 주로 사용되는 함수이다.

주로 range(시작 값, 끝 값 + 1) 형태로 쓰이지만, range(시작 값, 끝 값 + 1, step)의 형태로 작성할 경우 step은 슬라이싱의 stride와 같은 역할을 수행한다.

step에 음수를 지정할 수도 있다.

def solution(num_list):
    answer = []
    for i in range(len(num_list)-1, -1, -1):
        answer.append(num_list[i])
    return answer

 


중앙값 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/120811?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

배열 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/120821

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

슬라이싱과 range() 를 이용한 방법은 문자열을 뒤집을 때도 사용할 수 있다 !

문자열 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/120822

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments