1. itertools를 이용한 방법 파이썬에 내장된 itertools패키지의 combinations모듈과 permutations모듈을 통해 손쉽게 순열과 조합을 구할 수 있다. 이때, 만들어진 순열과 조합은 튜플의 형태로 리스트에 담겨서 반환된다. -> ([(0, 1, 2), ...]) 조합 from itertools import combinations arr = [0, 1, 2, 3, 4, 5] print(list(combinations(arr, 3))) 순열 from itertools import permutations arr = [0, 1, 2, 3, 4, 5] print(list(permutations(arr, 3))) 2. 재귀를 이용한 방법 재귀를 이용해서 조합과 순열을 구할 수 있다. 기본..
const const는 블록의 문맥 내에서 재할당할 수 없는 변수 선언이다. 즉, 한 번 선언하면 변경할 수 없다. 그러나 const에 할당된 값이 불변값이 되지는 않는다. 변수를 재할당할 수는 없지만, 값을 바꿀 수는 있다. 다음 예제를 보자. const로 선언한 배열(discountable)에 원소를 추가할 수 있다. const discountable = []; ... for (let i = 0; i < cart.length; i++) { if (cart[i].discountAvailable) { discountable.push(cart[i]); } } const를 통한 변수 선언의 장점을 살리기 위해선 조작(mutation)을 피하는 것이 좋다. 이를 조작이 없는 코드로 변경하면 다음과 같다. co..
파이썬은 정렬 함수를 기본으로 제공한다. sort()와 sorted()의 차이를 살펴보고 key 매개변수와 lambda 함수를 활용한 커스텀 정렬을 살펴본다. 1) Sort() vs Sorted() sort() .sort([key = ], [reverse = True|False]) 리스트 자료형에서만 사용 가능하다. 원래의 리스트가 변경된다(in-place). 아무것도 반환하지 않는다(None 리턴). 리스트를 정렬할 땐 sorted()보다 빠르다. reverse 매개변수로 True를 전달하면 내림차순 정렬할 수 있다. sorted() sorted(, [key = ], [reverse = True|False]) 모든 iterable한 객체에서 사용 가능하다. 원래의 리스트는 변화가 없다. 정렬된 새로운 ..
리스트을 순회하는 과정에서 데이터를 변경하다가 에러가 나는 경우는 굉장히 잦다. 특히 그 중에서 삭제는 가장 까다롭다. 이때, 리스트 표현식과 슬라이싱을 활용하여 데이터를 변경할 수 있다. 문제 예제 lost = [2,4]; reserve = [1,2,5] for i in range(len(reserve)): if reserve[i] in lost: del reserve[i] print(reserve) ''' Traceback (most recent call last): File "main.py", line 3, in if reserve[i] in lost: IndexError: list index out of range ''' 해결방법 리스트 표현식(List Comprehension) + 슬라이싱 lo..
알고리즘 문제들을 풀 땐 시간복잡도와 공간복잡도가 중요하다. 그 중 파이썬에서 자주 쓰이는 연산들의 시간복잡도를 자료형에 따라 정리했다. 리스트(List) Operation Example Complexity Notes Index l[i] O(1) Store l[i] = 0 O(1) Length len(l) O(1) Append l.append(5) O(1) Pop l.pop() O(1) same as l.pop(-1), popping at end Clear l.clear() O(1) similar to l = [] Slice l[a:b] O(b-a) l[1:5]:O(l)/l[:]:O(len(l)-0)=O(N) Extend l.extend(...) O(len(...)) depends only on len ..