작성
·
209
1
안녕하세요~ [초미니 프로젝트] 동전 앞뒤 맞추기 프로젝트를 내 나름대로 바꿔서 팀 정하는 프로그램으로 작성했습니다. 궁금한 것은 아래에 있는 코드를 실행소요 시간입니다.
import random
import time
start = time.time()
n = 500000
while(n > 0):
random_number = random.randint(1,12)
mod = random_number % 3
## 처음 작성한 방법
# if mod == 0:
# print("Red Team!")
# elif mod == 1:
# print("Blue Team!")
# else:
# print("Green Team!")
## 더 빠를거라 예상한 방법
team_list = ["Red", "Blue", "Green"]
print('{} Team!'.format(team_list[mod]))
n -= 1
end = time.time()
print(end - start)
랜덤으로 뽑은 숫자로부터 빨강, 파랑, 초록 팀을 출력해주는 코드입니다. 반복문이 여러번 나와서 더 간단하게 만들수 없을까 생각했습니다. 그래서 mod 변수를 인덱스로 사용하여 리스트에 접근하면 더 간단하게 표현할 수 있겠다고 생각했습니다. 그리고 어떤게 더 효율적일지 실험해봤습니다.
처음 작성한 코드는 3.348072052001953,
리스트로 작성한 코드는 4.024623870849609 가 걸렸습니다. 제 생각에는 리스트가 더 효율적일거라 생각했는데 왜 더 시간이 오래 걸렸을까요?
반복문도 mod 값에 맞는 조건을 찾을때까지 순차적으로 접근하고, 리스트도 순차적으로 접근하는 자료구조라 적어도 비슷해야할거라 생각이 듭니다.
답변 2
1
안녕하세요 김석제님,
이미 인프런 AI 인턴이 좋은 대답을 많이 해 놓아서 제가 답변을 할 필요가 없어졌네요 ㅎㅎㅎ.
필드에서는 일단 두번째 방법이 코드 유지하기가 편하기 때문에 두번째 방법을 선호하고, 속도 차이가 미미해서 AI 대답처럼 어떤 서버에서 돌리느냐도 어느정도 차이가 날 듯 합니다.
다른 질문 있으시면 또 질문 하시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다.
김석제님께서 질문하신 코드 실행 속도 차이와 관련해서, 바로 정확한 링크를 제공드리긴 어렵지만, 성능 차이에 영향을 줄 수 있는 몇 가지 요소에 대해 설명드리겠습니다.
리스트 접근 방식: 첫 번째 방법과 비교했을 때, 리스트를 사용하는 두 번째 방법은 추가적인 메모리 할당이 필요합니다. team_list
변수에 리스트를 할당하고 이를 인덱싱하기 위해서는 해당 리스트의 메모리 위치로 가서 값을 찾아오는 과정이 필요합니다. 이런 작은 추가 작업들이 누적되어 전체 실행 시간에 영향을 줄 수 있습니다.
문자열 포매팅 과정: 두 번째 방법에서는 format
을 사용하여 문자열을 생성합니다. 이 과정에서 파이썬은 새로운 문자열 객체를 생성해야 하므로, 이것이 실행 시간을 늘릴 수 있습니다. 첫 번째 방법에서는 그저 바로 문자열을 출력하는 것에 비해 두 번째 방법은 문자열 인터폴레이션 과정이 추가되므로, 이 부분이 성능 차이에 기여할 수 있습니다.
print 함수 호출: 또한, print
함수의 호출 자체가 실행 시간에 영향을 미칩니다. 커맨드라인이나 콘솔로 출력하는 과정 자체가 상당한 시간을 요구할 수 있습니다. 이는 반복문이 수백만 번 실행되는 경우 더욱 두드러집니다.
코드 실행 속도에 영향을 미치는 요소는 다양합니다. 예를 들어, 현재 여러분이 사용하는 파이썬 인터프리터의 구현(예: CPython, PyPy 등), 실행되는 환경의 리소스(컴퓨터의 CPU 속도나 메모리), 그리고 코드 내의 다른 요소들(함수 호출, 반복문의 효율성 등)도 고려되어야 합니다.
이와 유사한 맥락에서, 코드의 실행 시간을 측정하고 비교하는 방법에 관한 질문이 있었습니다: time과 timeit의 차이에서는 time
모듈과 timeit
모듈을 활용한 실행 시간 측정 방법과 그 차이점에 대한 설명이 담겨 있습니다. 이 내용이 코드 성능 테스트를 할 때 유용하게 활용될 수 있을 겁니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변해주셔서 감사합니다! 내부적으로 공부할것들이 많네요