誰もが知っているように、Python は効率的な言語ではありません。さらに、ループはどの言語でも非常に時間のかかる操作です。単純な 1 ステップの操作に 1 単位の時間がかかる場合、この操作を何万回も繰り返すと、最終的にかかる時間も何万倍にも増加します。
while と for は、Python でループを実装するためによく使用される 2 つのキーワードですが、実際には、これらの操作効率にはギャップがあります。たとえば、次のテスト コード:
import timeit def while_loop(n=100_000_000): i = 0 s = 0 while i while ループ 4.718853999860585 # => for ループ 3.211570399813354
これは、1 から n までのすべての自然数の合計を計算する単純な合計演算です。 for ループは while よりも 1.5 秒高速であることがわかります。
主な違いは、この 2 つのメカニズムの違いにあります。
各ループで、while は実際には for よりも 2 つのステップ (境界チェックと変数 i のインクリメント) を実行します。つまり、ループが実行されるたびに、while は境界チェック (while i while ループ 4.718853999860585 # => for ループ 3.211570399813354 # => インクリメント付きの for ループ4.602369500091299 # => for ループ with test 4.18337869993411
追加された境界チェックと自動インクリメント操作が、実際に for ループの実行効率に大きな影響を与えていることがわかります。
前述したように、Python の基礎となるインタプリタと組み込み関数は C 言語で実装されています。 C 言語の実行効率は Python よりもはるかに優れています。
インポート時間 def while_loop(n=100_000_000): i = 0 s = 0 while i while ループ 4.718853999860585 # => for ループ 3.211570399813354 # => sum range0.8658821999561042
組み込み関数 sum を使用してループを置き換えた後、コードの実行効率が 2 倍になっていることがわかります。
組み込み関数 sum の累積演算は実際にはループですが、C 言語で実装されており、for ループ内の sum 演算は純粋な Python によって実行されます。 code s = 気づきました。 C > パイソン。
考えを広げてください。私たちは皆、子供の頃、ガウスが 1 から 100 までの合計を独創的に計算したという話を聞いて育ってきました。1…100 の合計は (1 100) * 50 に等しくなります。この計算方法は、上記の合計演算にも適用できます。
インポート時間 def while_loop(n=100_000_000): i = 0 s = 0 while i while ループ 4.718853999860585 # => for ループ 3.211570399813354 # => 合計範囲0.8658821999561042 # => math sum 2.400018274784088e-06
math sum の最終的な実行時間は約 2.4e-6 となり、数百万倍も短縮されます。ここでの考え方は、ループの効率が低いため、コードを何億回も実行する必要があるということです。
単にループを行わず、数式を使用して何億ものループ操作を 1 つのステップに変換します。当然、効率もかつてないほど向上しました。
最終結論 (ちょっとなぞなぞ):
ループを実装する最速の方法 - - - ——ループは使用しないでください
Python の場合は、ループ内の純粋な Python コードを最小限に抑えるために、可能な限り組み込み関数を使用してください。
以上がPython ループのどの方法が最も速いかは、あなたの理解を覆すかもしれません。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。