210103 개발일지(27일차) - 파이썬 List 정렬 관련 정리 : list.sort(), sorted(), key=lambda 활용

고재개발·2021년 1월 3일
1

Algorithm

목록 보기
17/26

파이썬 공식문서(https://docs.python.org/ko/3/howto/sorting.html)를 제 마음대로 정리 요약해보았습니다.

list.sort()와 sorted() 함수 비교

  1. list.sort()는 제자리에서 리스트를 수정하고 None을 반환한다.(아래에서 확인)
  2. sorted()는 기존 리스트로부터 새로운 리스트를 만들 때 사용할 수 있다.
    즉, 1번은 원본이 유지되지 않고 2번은 원본을 유지할 수 있다.
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를 활용해서 다양하게 정렬하기

파이썬에서 제공하는 lambda를 활용하면 list를 다양하게 정렬할 수 있다.
그 중, 유용하게 쓰일 수 있는 아래 2가지에 대한 정렬 방법을 알아보자.

  1. 이중리스트에서 원하는 index 기준으로 정렬
  2. 문자열 길이 순으로 정렬

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']
profile
고재개발

0개의 댓글