皆さんこんにちは、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
def for_loop(n=100_000_000): s = 0 for i in range(n): s += i return s
def sum_range(n=100_000_000): return sum(range(n))
def sum_generator(n=100_000_000): return sum(i for i in range(n))
def sum_list_comp(n=100_000_000): return sum([i for i in range(n)])
import numpy def sum_numpy(n=100_000_000): return numpy.sum(numpy.arange(n, dtype=numpy.int64))
import numpy def sum_numpy_python_range(n=100_000_000): return numpy.sum(range(n))
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()
while より速い方法for ブロックfor と while は本質的に同じことをしていますが、while は純粋な Python コードであり、for は C 拡張機能を呼び出してインクリメントしますバインド チェック変数を使用すると、CPython インタプリタは C 言語で記述されており、Python コードは C コードよりも遅く、for ループは C を表し、while ループは Python を表すため、for は while よりも高速であることがわかります。 numpy の組み込み sum は Python の sum よりも高速ですnumpy は主に C で書かれています。同じ関数であれば、numpy の方が確実に高速です。同様に、numpy の arange は Python よりも確実に高速です。速い。 クロス使用は遅くなりますNumpy の合計は Python の範囲と組み合わせて使用され、結果が最長になります。方法 7 を参照してください。タスクを完了するには、方法 6 のように numpy パッケージを使用するのが最善です。 ジェネレーターはリスト内包表記より高速ですジェネレーターは遅延しており、一度に 1 億個の数値を生成しませんが、リスト内包表記はすべての数値を一度に割り当てるため、占有メモリが少なくなります。これを超えるとキャッシュを有効に利用できないため、パフォーマンスが若干低下します。
以上がPython の高速ループメソッドをいくつ知っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。