>  기사  >  백엔드 개발  >  Python에서 얼마나 많은 빠른 반복 방법을 알고 있습니까?

Python에서 얼마나 많은 빠른 반복 방법을 알고 있습니까?

WBOY
WBOY앞으로
2023-04-13 09:13:061806검색

안녕하세요 여러분, 저는 somenzz입니다. 오늘은 Python에서 가장 빠른 루프 방법을 공부하겠습니다.

다양한 자세

예를 들어, 1부터 1억까지 누적하는 간단한 작업이 있습니다. 다음과 같이 최소 7가지 방법으로 달성할 수 있습니다.

1 while 루프

def while_loop(n=100_000_000):
i = 0
s = 0
while i < n:
s += i
i += 1
return s

2. for loop

def for_loop(n=100_000_000):
s = 0
for i in range(n):
s += i
return s

3, 합계 범위

def sum_range(n=100_000_000):
return sum(range(n))

4, 합계 생성기(생성기)

def sum_generator(n=100_000_000):
return sum(i for i in range(n))

5, 합계 목록 이해(목록 이해)

def sum_list_comp(n=100_000_000):
return sum([i for i in range(n)])

6, 합계 numpy

import numpy
def sum_numpy(n=100_000_000):
return numpy.sum(numpy.arange(n, dtype=numpy.int64))

7, 합계 numpy 파이썬 범위

import numpy
def sum_numpy_python_range(n=100_000_000):
return numpy.sum(range(n))

위 7가지 메소드로 얻은 결과는 동일하지만 소요되는 시간이 다릅니다. 어느 메소드가 가장 빠른지 추측해 보고 다음 코드의 실행 결과를 보면 됩니다.

import timeit

def main():
l_align = 25
print(f'{"1、while 循环":<{l_align}} {timeit.timeit(while_loop, number=1):.6f}')
print(f"{'2、for 循环':<{l_align}}{timeit.timeit(for_loop, number=1):.6f}")
print(f'{"3、sum range":<{l_align}} {timeit.timeit(sum_range, number=1):.6f}')
print(f'{"4、sum generator":<{l_align}} {timeit.timeit(sum_generator, number=1):.6f}')
print(f'{"5、sum list comprehension":<{l_align}} {timeit.timeit(sum_list_comp, number=1):.6f}')
print(f'{"6、sum numpy":<{l_align}} {timeit.timeit(sum_numpy, number=1):.6f}')
print(f'{"7、sum numpy python range":<{l_align}} {timeit.timeit(sum_numpy_python_range, number=1):.6f}')

if __name__ == '__main__':
main()

실행 결과는 다음과 같습니다.

Python에서 얼마나 많은 빠른 반복 방법을 알고 있습니까?

더 빠른 방법

for while block

for과 while은 본질적으로 동일한 작업을 수행하지만 while은 순수한 Python 코드이고, 변수 증가 및 경계 확인을 위한 C 확장 호출의 경우 CPython 인터프리터를 알고 있습니다. C 언어로 작성되었으며, Python 코드는 C 코드보다 느리고, for 루프는 C를 나타내고, while 루프는 Python을 나타내므로 for가 while보다 빠릅니다.

numpy의 내장 합계는 Python의 합계보다 빠릅니다.

numpy는 주로 C로 작성되었습니다. 동일한 함수는 확실히 numpy보다 빠릅니다. 마찬가지로 numpy의 arange도 Python의 범위보다 확실히 빠릅니다.

교차 사용이 느려집니다.

Numpy의 합계는 Python의 범위와 함께 사용되며 결과가 가장 깁니다. 방법 7을 참조하세요. 방법 6과 같이 작업을 완료하려면 numpy 패키지를 사용하는 것이 가장 좋습니다.

생성기는 목록 이해보다 빠릅니다

생성기는 게으르고 한 번에 1억 개의 숫자를 생성하지 않는 반면, 목록 이해는 모든 숫자를 한 번에 할당합니다. 높은 메모리 사용량은 말할 것도 없고 아직 효율적이지 않습니다. 캐시가 부족하므로 성능이 약간 떨어집니다.

위 내용은 Python에서 얼마나 많은 빠른 반복 방법을 알고 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제