반응형
Python List 최대, 최소 값 차이 구하기 (feat. 파이썬 동작 시간 측정으로 가장 빠르게 구하는 방법은?)
리스트 안에 많은 값들이 있다고 가정을 하고 이 중에 가장 큰 값과 작은 값을 구하는 방법은 여러가지가 있다. 이 중에서 대표적인 2가지 방법으로 아래 2가지 방법을 사용하겠다.
- min, max 함수를 사용하여 구하기
- Python 내장 함수 sort를 사용하여 정렬로 구하기
예제 코드를 통해 구해 보기
코드>>
import sys
import time
import random
def max_diff0(values: list[int]) -> int:
temp_max = 0
temp_min = sys.maxsize
for value in values :
temp_min = min(temp_min, value)
temp_max = max(temp_max, value - temp_min)
return temp_max
def max_diff1(values: list[int]) -> int:
values.sort()
temp_max = values[-1] - values[0]
return temp_max
A=[]
for _ in range(1000000):
A.append(random.randint(0, 10000000))
cur_time = time.time()
print(max_diff0(A))
print("max_diff0 time : ",float(time.time()-cur_time))
cur_time = time.time()
print(max_diff1(A))
print("max_diff1 time : ",float(time.time()-cur_time))
결과>>
9999996
max_diff0 time : 0.15124821662902832
9999996
max_diff1 time : 0.2196211814880371
주석>>
max_diff0은 min, max 함수를 사용해서 최소값과 최대값을 모든 리스트 값을 확인하면서 바꾸어 주었다. 그리고 약 0.15초라는 프로그램 동작 시간이 걸렸다.
max_diff1은 파이썬에서 제공하는 내장함수 sort를 사용해서 리스트를 정렬하고 최소값은 [0]에 존재하고 최대값은 [1]에 존재하는 것을 알기 때문에 이를 빼주기만 하였다. 코드가 돌아가는데 걸린 시간은 약 0.21초 걸렸다.
코드 단순성은 sort를 사용하는 것이 좋으나 내장형 함수를 사용하는 것 자체가 시간 효율에는 불리한점이 있다. 만일 리스트의 크기가 더 커진다면 효율을 생각한 코드 작성이 필요하다.
참고사항>>
초기에 sort 코드를 작성하면서 아래와 같은 에러메세지가 발생하였다.
TypeError: 'NoneType' object is not subscriptable
이는 내가 sort를 아래와 같이 return으로 받으려고 했기 때문이다.
values = values.sort()
하지만 이 내장함수는 return이 아닌 바로 list에 적용되기 때문에 return을 적용할 필요가 없다.
반응형
'파이썬(Python) > 문법' 카테고리의 다른 글
(python)정규표현식 예제로 이해하기 - 아이디,이메일,전화번호,포트 (0) | 2021.08.11 |
---|---|
파이썬 문장(string)을 왼쪽, 오른쪽 끝에 배치하고 싶을 때 (":>" 와 ":<"의 의미, 여백 넣기) (0) | 2021.08.05 |
파이썬 @staticmethod 란? (예제로 이해하기, 골뱅이마크 의미) (0) | 2021.07.01 |
파이썬 Class 상속(Inheritance)란? (예제로 알아보기) (0) | 2021.06.30 |
파이썬 폴더위치에 따른 import 방법 (상위,하위,동일 폴더 위치)을 예제로 이해하기 (0) | 2021.05.22 |