파이썬(Python)/문법

파이썬 List 최대, 최소 값 차이 구하기 (feat. 파이썬 동작 시간 측정으로 가장 빠르게 구하는 방법은?)

끄적끄적아무거나 2021. 7. 22. 07:40
반응형

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을 적용할 필요가 없다.

 

 

반응형