파이썬 공식문서(https://docs.python.org/ko/3/howto/sorting.html)를 제 마음대로 정리 요약해보았습니다.
a=[1,5,4,3,2]
print(sorted(a))
print(a.sort())
>
> 출력값
> >>>
[1, 2, 3, 4, 5]
None
예를들어, 통상 아래와 같이 쓰인다고 생각하면 된다.
a=[1,5,4,3,2]
new_a=sorted(a) # a에는 그대로 [1,5,4,3,2] 유지됨
a.sort() # a 자체가 [1,2,3,4,5]로 변함
파이썬에서 제공하는 lambda를 활용하면 list를 다양하게 정렬할 수 있다.
그 중, 유용하게 쓰일 수 있는 아래 2가지에 대한 정렬 방법을 알아보자.
- 이중리스트에서 원하는 index 기준으로 정렬
- 문자열 길이 순으로 정렬
1. 이중리스트에서 원하는 index 기준으로 정렬
예를 들어, list=[[5, 3], [4, 7], [3, 1], [6, 5]]가 있다고 하자.
여기서 그냥 sort()나 sorted() 함수를 이용하면, 정렬이 될까?
정답은 된다. 그 기준은 자연스레 각 원소의 0번 index(5,4,3,6)를 기준으로 정렬이 된다.
list=[[5, 3], [4, 7], [3, 1], [6, 5]]
new_list=sorted(list) # 혹은
list.sort() # 를 활용하면 # [[3, 1], [4, 7], [5, 3], [6, 5]]가 출력
여기서, 1번 index(3,7,1,5)를 기준으로 정렬하고 싶으면 lambda 함수를 활용하면 된다.
이제 lambda를 어떻게 활용하는 지 보자.
list=[[5, 3], [4, 7], [3, 1], [6, 5]]
new_list=sorted(list, key=lambda x : x[1]) # 혹은
list.sort(key=lambda x : x[1]) # 를 활용하면 # [[3, 1], [5, 3], [6, 5], [4, 7]]가 출력
2. 문자열 길이 순으로 정렬
이제 문자열 길이로 정렬하는 건, 유추 가능할 것이다.
그 전에, 그냥 문자열 list를 sort하면 어떤 결과가 나올까?
list=['i', 'am', 'so', 'sorry', 'but', 'i', 'love', 'you', 'dagjitmal']
list.sort() #혹은 list=sorted(list)
print(list) # ['am', 'but', 'dagjitmal', 'i', 'i', 'love', 'so', 'sorry', 'you']
바로 사전순으로 나온다. (a~z순)
lambda함수를 활용해, 길이순으로 배열하기 위해서는 아래와 같이 처리해주면 된다.
list=['i', 'am', 'so', 'sorry', 'but', 'i', 'love', 'you', 'dagjitmal']
list.sort(key=lambda x: len(x)) #혹은 list=sorted(list, key=lambda x: len(x))
print(list) # ['i', 'i', 'am', 'so', 'but', 'you', 'love', 'sorry', 'dagjitmal']