파이썬에서 리스트 형태를 정렬할 수 있는 함수로 sort()와 sorted() 두가지가 있다.
먼저, sort()와 sorted()의 차이를 간단하게 말하면,
sort()는 기존에 선언한 변수를 update해주는 기능+정렬이고,
sorted()는 기존에 선언한 변수를 update하지 않고, 정렬된 결과만 보여주는 역할을 한다.
아래의 예시로 더 쉽게 이해해보자.
먼저 sort()
- 문법은 list.sort()이며, 내부 파라미터는 key=None과 reverse = False가 default로 설정되어 있다.
- reverse = True로 내림차순을 만들어준다.
- key 메쏘드는 아래에서 다시 다루겠다.
# 사용예시
list1 = [1, 10, -3, 4, -2, 2]
list1.sort()
list1 # output : [-3, -2, 1, 2, 4, 10]
list1 = [1, 10, -3, 4, -2, 2]
list1.sort(reverse=True)
list1 # output : [10, 4, 2, 1, -2, -3]
여기서 주의할 점은 list1 = list1.sort() 이런식으로 새로운 변수에 선언할 순 없다.
처음 설명했던 것처럼 객체 자체를 변경시키는 기능이 이미 있기때문이다.
이 코드를 실행시켜보면, 에러는 나지 않지만 None으로 선언되게 된다.
list1 = [1, 10, -3, 4, -2, 2]
list1 = list1.sort()
print(list1)
# output: None
위와 같은 문법은 새로운 객체에 정렬된 리스트를 선언하고 싶은 경우에 사용되고 이 때, sorted() 함수를 써야한다.
sorted(iterable, key=None, reverse=False) --> iterable(list)를 제외한 인자(파라미터)는 sort() 함수와 같다.
list1 = [1, 10, -3, 4, -2, 2]
list1 = sorted(list1)
list1 # output : [-3, -2, 1, 2, 4, 10]
# 응용 (key)
sort, sorted에는 key라는 파라미터로 sort하는 기준을 직접 지정할 수 있는 기능이 있다.
예를 들어서, 규칙적인 네이밍에 숫자만 변경되는 문자열 리스트가 있다고 가정해보자.
그 문자열이 아래와 같이 뒤죽박죽 배열 되어있는 상황에서 어떻게 정렬을 할 수 있을까?
이 때, sort 함수의 key파라미터를 활용하면 간단하게 정렬할 수 있다.
key 파라미터에 입력할 수 있는 것은 callable function 형태의 변수이다. 쉽게말해서 값을 계산해주는 함수를 지정해야한다는 것이다. 입력하는 방법은 다음과 같다.
def getindex(text):
return int(text.split('_')[-1].split('.')[0])
PATHLIST.sort(key=getindex)
PATHLIST
만약, 리스트의 형태가 아래와 같은 nested list라면,
tuple1 = [('class1', 'student1', 40),
('class1', 'student2', 20),
('class2', 'student3', 26)]
print("Nested List")
image_tuple
아래와 같이 lambda 기능을 활용하여 정렬할 수도 있다.
image_tuple.sort(key=lambda t:t[2])
image_tuple
또한, 1차적인 정렬 후에 동일한 값이 있을 때, 2차 정렬을 해줄 조건을 멀티로 달아줄 수도 있다.
* sort() 정렬의 다중 조건식
tuple2 = [('class1', 'student1', 40, 100),
('class1', 'student2', 40, 80),
('class2', 'student3', 26, 90),
('class3', 'student4', 35, 88)]
tuple2
tuple2.sort(key=lambda x: (x[2], x[3])) # 튜플형태로 조건을 넣어주기
tuple2.sort(key=lambda x: [x[2], x[3]]) # 리스트형태도 가능
tuple2
'Programming > python' 카테고리의 다른 글
파이썬 string 문자를 ascii code 아스키 코드로 변환하는 방법 (feat. 프로그래머스 외계행성의 나이 구하기) (0) | 2023.01.24 |
---|---|
How to reshape numpy array (ndarray) - 넘파이 어레이 크기 변경하는 방법 2가지 (2) | 2023.01.02 |
[프로그래머스] 파이썬 Python 점의 위치 구하기 | List Tuple Boolean Indexing (0) | 2022.12.24 |
Python Pandas Cheat Sheet | 판다스 완전 정복하기 (2) | 2022.12.19 |
파이썬 - 출력 텍스트에 색상넣는 방법 | print() function with colored text in python (0) | 2022.11.17 |