요즘 알고리즘 공부를 하고 있다 보니 내장 함수의 중요성을 뼈저리게 깨닫게 되었다
배열 형식으로 주어진 문제는 거의 대부분 정렬만 잘해도 풀 수 있는데 파이썬에서는 list.sort(), sorted(list)를 사용한다
sort()
- 원본 리스트의 순서를 변경(원본에 영향을 끼침)
- 리턴 값 None
- 리스트형의 메소드
사용 방법 - list.sort(self, key, reverse)
l1 = [1,3,5,4,6,2]
print('정렬 전', l1)
l2 = l1.sort()
print('정렬 후', l1)
print('리턴값', l2)
l1.sort(reverse=True) #reverse를 True로 설정하여 내림차순 적용
print('내림차순', l1)
key, reverse에 아무 조건을 달지 않으면 오름차순으로 정렬된다
sort() 함수는 리턴 값이 없기 때문에 l2는 None으로 출력
sorted()
- 정렬된 새로운 리스트를 반환( 원본에 영향을 끼치지 않음)
- 리턴 값은 정렬된 새로운 리스트로 받을 수 있다
- 모든 iterable에 적용됨(list, tuple, dict, 문자열)
- 내장 함수
사용 방법 - sorted(iterable, key, reverse)
l1 = [1,3,5,4,6,2]
l2 = sorted(l1)
print('정렬 전', l1)
print('정렬 후', l2) #원본 리스트는 영향x 새로운 리스트에 정렬
print('리턴값', l2)
l2 = sorted(l1,reverse=True)
print('내림차순', l2)
sort()와 달리 정렬된 값은 새로운 리스트에 반환되어 저장하기 때문에
l2를 출력해야 정렬된 리스트를 출력할 수 있다
반응형
key를 사용하여 정렬
1. len을 사용하여 리스트 배열의 길이 기준으로 정렬
l1 = ['11112211','abc','512222','24','1262','1']
l2 = ['11112211','abc','512222','24','1262','1']
print('정렬 전', l1)
print('-------------------------------------------------------------------------')
l1.sort(key=len)
print('sort 정렬 후', l1)
print('sorted 정렬 후', sorted(l2,key=len))
print('-------------------------------------------------------------------------')
l1.sort(key=len,reverse=True)
print('sort 내림차순 정렬 후', l1)
print('sorted 내림차순 정렬 후', sorted(l2,key=len,reverse=True))
2. lambda 사용
key=lambda x:x [0]를 사용하여 2차원 배열의 0번째 열을 기준으로 정렬
l1 =[[1,2],[0,1],[3,4],[2,3],[4,5],[5,6]]
l2 =[[1,2],[0,1],[3,4],[2,3],[4,5],[5,6]]
print('정렬 전',l1)
l1.sort(key=lambda x:x[0])
print('sort 정렬',l1)
print('sorted 정렬',sorted(l2,key=lambda x:x[0]))
print('-------------------------------------------------')
l1.sort(key=lambda x:-x[0])
print('sort 정렬',l1)
print('sorted 정렬',sorted(l2,key=lambda x:-x[0]))
reverse 대신 x [0] 앞에 -를 붙여주어도 반대로 정렬된다
정렬할 아이템이 여러 개인 경우
l1 =[[1,3],[1,6],[3,5],[2,7],[1,4],[5,1]]
l2 =[[1,3],[1,6],[3,5],[2,7],[1,4],[5,1]]
print('x[0]먼저 정렬한 뒤에 x[1] 오름차순으로 정렬')
print('정렬 전',l1)
l1.sort(key=lambda x:(x[0],x[1]))
print('sort 정렬',l1)
print('sorted 정렬',sorted(l2,key=lambda x:(x[0],x[1])))
print('---------------------------------------------------------------')
print('x[0]먼저 정렬한 뒤에 x[1] 내림차순으로 정렬')
l1.sort(key=lambda x:(x[0],-x[1]))
print('sort 정렬',l1)
print('sorted 정렬',sorted(l2,key=lambda x:(x[0],-x[1])))
반응형
'Python' 카테고리의 다른 글
Python 순열, 조합으로 숫자 조합하기 (itertools 사용) (0) | 2022.03.22 |
---|---|
[python] 리스트 내 조건문 사용하기 - 리스트 컴프리헨션 (List Comprehension) (0) | 2022.02.16 |
[python] 각 자리 수의 숫자를 리스트로 출력 list(map(int,str(n))) (0) | 2022.02.10 |
Python에서 SQLite 데이터 삭제하기(DELETE 문) (0) | 2021.10.27 |
Python에서 SQLite 데이터 수정하기(UPDATE문) (0) | 2021.10.26 |
댓글