Python 리스트 정렬
(1) sorted()
- 내장함수
- 정렬된 새로운 리스트를 얻어냄
(2) sort()
- 리스트의 메서드(method)
- 해당 리스트를 정렬함
L=[3,8,2,7,6,10,9]
L2=sorted(L)
# L2는 [2,3,6,7,8,9,10]
# L은 [3,8,2,7,6,10,9] # L과 L2는 다름
L.sort()
# L은 [2,3,6,7,8,9,10] # L의 정렬이 바뀜
- 정렬의 순서를 반대로: reverse=True (내림차순)
L2=sorted(L, reverse=True)
L.sort(reverse=True)
- 문자열로 이루어진 리스트의 경우 정렬 순서는 사전 순서(알파벳 순서)
(문자열 길이가 긴 것이 더 큰 것이 아님) - 문자열 길이 순서로 정렬하려면?
-> 정렬에 이용하는 키(key)를 지정
L=['abcd', 'xyz', 'spam']
sorted(L, key=lambda x: len(x))
# ['xyz', 'abcd', 'spam']
L=['spam', 'xyz', 'abcd']
sorted(L, key=lambda x: len(x))
# ['xyz', 'spam', 'abcd']
- 키를 지정하는 또 다른 예
L=[{'name':'John', 'score':83},
{'name':'Paul', 'score':92}]
# 레코드들을 이름 순서대로 정렬
L.sort(key=lambda x:x['name'])
# 레코드들을 점수 높은 순으로 정렬
L.sort(key=lambda x:x['score'], reverse=True)
탐색 알고리즘
탐색 알고리즘(1) - 선형 탐색 (Linear Search)
- 앞에서부터 뒤로 순차적으로 탐색리스트의 길이에 비례하는 시간 소요 -> O(n)
- 최악의 경우 모든 원소를 다 비교해 보아야 함
탐색 알고리즘(2) - 이진 탐색 (Binary Search)
- 탐색하려는 리스트가 이미 정렬되어 있는 경우에만 적용 가능
- 크기순으로 정렬되어 있다는 성질 이용
- 한 번 비교가 일어날 때마다 리스트 반씩 줄임
(divicde & conquer) - O(log n)
실습코드 - 이진 탐색 구현
def solution(L, x):
lower=0
upper=len(L)-1
while lower<=upper:
middle=(lower+upper)//2
if L[middle]==x:
return middle
elif L[middle]>x:
upper=middle-1
else:
lower=middle+1
return -1
* 프로그래머스의 '어서와! 자료구조와 알고리즘은 처음이지?' 강의를 듣고 정리하였습니다.
'알고리즘 강의' 카테고리의 다른 글
[알고리즘 강의] 파트7. 연결 리스트(Linked Lists) (1) (0) | 2021.07.14 |
---|---|
[알고리즘 강의] 파트6. 알고리즘의 복잡도(Complexity of Algorithms) (0) | 2021.07.13 |
[알고리즘 강의] 파트5. 재귀 알고리즘(Recursive Algorithms) 응용 (0) | 2021.07.13 |
[알고리즘 강의] 파트4. 재귀 알고리즘(Recursive Algorithms) 기초 (0) | 2021.07.13 |
[알고리즘 강의] 파트1, 파트2 정리 (0) | 2021.07.12 |