Python
-
빠른 리스트 객체 복사Python 2021. 11. 20. 10:12
한 줄 요약: 내부 데이터가 imutable 객체로 구성된 list type 객체의 깊은 복사가 필요할 때는 slicing을 사용하자. [mutable type과 깊은 복사의 필요성] list는 mutable type이다. 따라서 list 변수는 데이터가 존재하는 메모리 주소를 가지고 있는 셈이다. 다음 코드를 보자. L1 = [1, 2, 3] L2 = l1 print(L1) print(L2) L1 = [1, 2, 3]이고 L2에 L1을 넣었으니 L1과 L2을 각각 출력하면 동일하게 [1, 2, 3]이다. 이제 L2 [1]의 값을 10으로 변경 후 다시 L1과 L2를 출력해보자. L2[1] = 10 print(L1) print(L2) L1과 L2가 모두 [1, 10, 3]으로 변경되는 것을 볼 수 있다...
-
Python 실행속도 개선 방법Python 2021. 10. 4. 18:38
python 코드 최적화와 관련한 좋은 포스팅을 발견하여 참고를 위해 번역하여 정리해 놓는다. (https://towardsdatascience.com/10-techniques-to-speed-up-python-runtime-95e213e925dc) [최적화에 앞서 고려할 부분] 정상적으로 작동하는 명확하고 가독성 좋은 코드를 작성하는 것이 최적화의 전제조건이다. 명확하고 가독성 좋은 코드의 속도를 개선하는 것이 이해하기 어렵고 가독성 좋지 않은 코드를 개선하는 것보다 훨씬 쉽기 때문이다. 최적화는 비용을 수반한다. 대체로 시간복잡도와 공간복잡도는 반비례 관계가 된다. 실행시간을 줄이기 위해서는 메모리를 더 사용하게 되고 메모리 사용을 줄이고자 하면 실행시간이 늘어날 수밖에 없다. 코드 작성의 우선순위는..
-
itertools - product(), permutations(), combinations()Python 2021. 9. 1. 09:35
product() 1개 이상의 iterable 간에 곱집합을 생성한다. 주어진 문자들로 구성된 길이 n의 모든 문자열을 만들어야 한다거나 할 때 사용하면 되겠다. from itertools import product data1 = 'AB' data2 = '가나' for elem in product(data1, data2): print(''.join(elem)) ''' 출력결과 A가 A나 B가 B나 ''' # argument repeat에 반복할 숫자를 지정하면 이전의 iterable들을 숫자만큼 반복하여 곱집합을 생성한다. for elem in product(data1, repeat=3): print(''.join(elem)) ''' 출력결과 AAA AAB ABA ABB BAA BAB BBA BBB ''..
-
all(), any() 함수Python 2021. 8. 31. 09:15
all() iterable 객체의 모든 요소들이 특정 조건을 만족하는지 확인하는 함수 all(반복 가능한 객체 안에서 찾고자 하는 조건) # all() : iterable 객체의 모든 원소가 특정 조건에 부합하는지 확인하는 함수 test_data = [4, 5, 3, 6, 7, 9] # 예시1 if all(data > 1 for data in test_data): print("모든 원소는 1보다 큽니다.") else: print("1 이하의 원소가 존재합니다.") # 예시2 if all(data > 5 for data in test_data): print("모든 원소는 5보다 큽니다.") else: print("5 이하의 원소가 존재합니다.") 예시1에서 모든 test_data의 원소들이 data > 1..
-
여러 iterable 객체를 묶어주는 zip 내장함수Python 2021. 7. 2. 17:21
여러 개의 iterable 객체의 요소들을 순서대로 하나씩 묶어주고 싶은 경우가 있을 수 있다. 예를 들어 다음과 같이 두 개의 리스트를 순서대로 각각 쌍으로 묶고자 하는 경우 어떻게 해야 할까? list1 = [1, 2, 3] list 2 = ['A', 'B', 'C'] --> result = [(1, 'A'), (2, 'B'), (3, 'C')] 이럴 때 사용할 수 있는 함수가 zip이다. zip을 사용하면 간단하게 여러 개의 iterable 객체의 요소들을 순차적으로 튜플 자료형으로 묶어준다. list1 = [1, 2, 3] list2 = ['A', 'B', 'C'] for elem in zip(list1, list2): print(elem) 위의 소스코드를 실행하면 zip 함수를 통해 생성된 zi..
-
for ~ else 문Python 2021. 7. 2. 16:06
for loop를 중간에 탈출하지 않고 완료한 경우에 한해 실행되는 구문이 필요할 수 있다. 다음과 같이 내부에 마지막 반복을 확인하는 구문을 두고 만족하는 경우 실행되도록 하는 방법을 생각해볼 수 있다. data = [1, 2, 3, 4, 5] for i in range(len(data)): print(data[i]) if i == len(data) - 1: print('반복문이 종료되었습니다.') 이를 for ~ else 구문을 통해 다음과 같이 보다 간단하게 표현할 수 있다. data = [1, 2, 3, 4, 5] for i in range(len(data)): print(data[i]) else: print('반복문이 종료되었습니다.') for ~ else 구문 실행 중 loop가 완료되기 전에..
-
Python 코드 실행 시간 측정 (성능측정)Python 2021. 2. 13. 09:58
python 코드의 순수 연산 시간과 전체 실행 시간을 측정하는 방법은 다음과 같습니다. 1. 순수 연산 시간의 측정 (코드의 성능을 확인): process_time()을 사용 process_time()은 sleep, io와 같은 pending time을 포함하지 않고 순수 연산에 들어간 시간만 측정하기 때문에 연산에 필요한 시간만 확인하고 싶을 때는 process_time()을 사용합니다. import time start_time = time.process_time() # 실행 시간을 측정할 코드 end_time = time.process_time() print(f"time elapsed : {int(round((end_time - start_time) * 1000))}ms") 2. 전체 실행시간의 측..
-
재귀호출 (recursive call)Python 2021. 1. 9. 20:09
순서 1. 재귀의 개념 및 예제 2. 꼬리재귀 1. 재귀의 개념 및 예제 재귀의 사전적 의미는 "본디의 것으로 다시 돌아오는 것"이다. 정의된 함수 func()가 있다고 할 때 해당 함수 내부에서 자기 자신 즉 func()를 호출하는 것이다. 재귀호출의 구조 def func(n): if n == 0:# 재귀 호출을 탈출할 수 있는 조건을 명시해야 한다. return 1: else: return func(n-1))# 함수 내부에서 동일 함수를 호출한다. 재귀호출 예제1 - factorial def factorial(n): if n