가장 빠른 Python 루프 방법은 이해를 뒤집을 수 있습니다!

王林
풀어 주다: 2023-04-17 23:10:01
앞으로
1245명이 탐색했습니다.

우리 모두 알고 있듯이 Python은 효율적인 언어가 아닙니다. 또한 루핑은 모든 언어에서 매우 시간이 많이 걸리는 작업입니다. 간단한 단일 단계 작업에 1 단위 시간이 소요된다면 이 작업을 수만 번 반복하면 최종 소요 시간도 수만 배 증가합니다.

while과 for는 Python에서 루프를 구현하는 데 일반적으로 사용되는 두 가지 키워드입니다. 실제로 작동 효율성에는 차이가 있습니다. 예를 들어 다음 테스트 코드는:

import timeit
def while_loop(n=100_000_000):
 나는 = 0
 초 = 0
 나는 <
 s += 나
 나는 += 1
 반환하다
def for_loop(n=100_000_000):
 초 = 0
 범위(n)에 있는 i의 경우:
 s += 나
 반환하다
데프 메인():
 print('while looptt', timeit.timeit(while_loop, number=1))
 print('for looptt', timeit.timeit(for_loop, number=1))
__name__ == '__main__'인 경우:
 기본()
# => while 루프 4.718853999860585
# => for loop 3.211570399813354

1부터 n까지의 모든 자연수의 합을 계산하는 간단한 합 연산입니다. for 루프가 while보다 1.5초 더 빠른 것을 볼 수 있습니다.

가장 큰 차이점은 둘 사이의 메커니즘이 다르다는 것입니다.

각 루프에서 while은 실제로 for보다 두 단계를 더 수행합니다: 경계 검사 및 변수 i 증분. 즉, 루프가 수행될 때마다 while은 경계 검사(i

import timeit
def while_loop(n=100_000_000):
 나는 = 0
 초 = 0
 나는 <
 s += 나
 나는 += 1
 반환하다
def for_loop(n=100_000_000):
 초 = 0
 범위(n)에 있는 i의 경우:
 s += 나
 반환하다
def 합계_범위(n=100_000_000):
 반환 합계(범위(n))
데프 메인():
 print('while looptt', timeit.timeit(while_loop, number=1))
 print('for looptt', timeit.timeit(for_loop, number=1))
 print('합계 범위', timeit.timeit(sum_range, number=1))
__name__ == '__main__'인 경우:
 기본()
# => while 루프 4.718853999860585
# => 루프 3.211570399813354
# => sum range0.8658821999561042

내장 함수 sum을 사용하여 루프를 교체한 후 코드 실행 효율성이 두 배로 향상되었음을 알 수 있습니다.

내장 함수 sum의 누적 연산은 실제로 루프이지만 C 언어로 구현된 반면, for 루프의 합 연산은 순수 Python으로 수행됩니다. code s += 깨달았습니다. C > 파이썬.

생각의 폭을 넓혀보세요. 우리 모두는 어린 시절 가우스가 1부터 100까지의 합을 계산하는 독창적인 이야기를 듣고 자랐습니다.1…100의 합은 (1 + 100) * 50과 같습니다. 이 계산 방법은 위의 합산 연산에도 적용될 수 있습니다.

import timeit
def while_loop(n=100_000_000):
 나는 = 0
 초 = 0
 나는 <
 s += 나
 나는 += 1
 반환하다
def for_loop(n=100_000_000):
 초 = 0
 범위(n)에 있는 i의 경우:
 s += 나
 반환하다
def 합계_범위(n=100_000_000):
 반환 합계(범위(n))
def math_sum(n=100_000_000):
 반환 (n * (n - 1)) // 2
데프 메인():
 print('while looptt', timeit.timeit(while_loop, number=1))
 print('for looptt', timeit.timeit(for_loop, number=1))
 print('sum rangett', timeit.timeit(sum_range, number=1))
 print('수학 합계', timeit.timeit(math_sum, 숫자=1))
__name__ == '__main__'인 경우:
 기본()
# => while 루프 4.718853999860585
# => 루프 3.211570399813354
# => 합계 범위0.8658821999561042
# => math sum 2.400018274784088e-06

math sum의 최종 실행 시간은 약 2.4e-6으로 수백만 배 단축됩니다. 여기서 아이디어는 루프의 효율성이 낮기 때문에 코드 조각을 수억 번 실행해야 한다는 것입니다.

루프를 실행하지 말고 수학 공식을 사용하여 수억 개의 루프 작업을 단 한 단계로 전환하세요. 이전과는 비교할 수 없을 정도로 효율성이 자연스럽게 향상되었습니다.

최종 결론(약간 수수께끼):

루프를 구현하는 가장 빠른 방법 - - — ——루프를 사용하지 마세요

Python의 경우 내장 함수를 최대한 사용하여 루프에서 순수 Python 코드를 최소화하세요.

로그인 후 복사

위 내용은 가장 빠른 Python 루프 방법은 이해를 뒤집을 수 있습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿