ホームページ > バックエンド開発 > Python チュートリアル > Python ループのどの方法が最も速いかは、あなたの理解を覆すかもしれません。

Python ループのどの方法が最も速いかは、あなたの理解を覆すかもしれません。

王林
リリース: 2023-04-17 23:10:01
転載
1270 人が閲覧しました

誰もが知っているように、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート