テスト環境
コードは、本明細書に言及されるMacOSのシステムCentOS7のテスト、Pythonはバージョン3.6.8です。
テストモジュール
Pythonのテストモジュールが内蔵されてはtimeitモジュール:
timeitモジュールは小さなPythonコードの実行速度をテストするために使用することができます。
タイマークラス
クラス timeit.Timer(stmtは= ' パス'、セットアップ= ' 合格'、タイマー= <タイマ機能>)
タイマーは、コード実行のスピードクラスの小片の尺度です。
STMTパラメータは、テストするコード声明(なステートメント)です。
コードセットを実行するときに、セットアップパラメータが必要です。
タイマーパラメータは、タイマー機能、およびプラットフォームに依存しています。
タイマークラスメソッドはtimeit
timeit.Timer.timeit(番号= 1000000)
オブジェクトの実行速度の方法は、Timerクラスステートメントをテストしました。テストコードは、デフォルトは1,000,000であるときnumber引数は、テストの数です。この方法は、平均実行時間のかかるコード、秒フロートのタイプを返します。
内蔵のパフォーマンステストリストの方法
私たちは、式またはAPPENDのリスト、インサートのリストを生成するために、ということを知って、これらのメソッドを拡張使用することができ、そして今、私たちは、これらの方法の効率を見てみましょう。
timeit インポートタイマ DEF :test_list() LST =リスト(範囲(1,000 )) DEF test_generation(): LST = [I 用 I における範囲(1,000 )] DEF )test_append(: LST = [] のための I における範囲(1,000 ): lst.append(I) DEF test_add(): LST = [] のための I における範囲(1,000 ): LST + = [I] #リストINSERTの頭の中で DEFの:test_insert_zero() LST = [] のための I における範囲(1,000 ): lst.insert(0、I) #リストINSERTの終わりに DEFのtest_insert_end(): LST = [] のための I における範囲(1,000 ): lst.insert( -1 、I) DEFのtest_extend(): LST = [] lst.extend(リスト(レンジ( 1000年))) T1 =タイマ(" test_list()"、"__main__インポートtest_listから" ) 印刷(F " 秒test_listは{t1.timeit(番号= 1000を取る)} " ) T2 =タイマ(" test_generation()" " __main__インポートtest_generationから" ) 印刷(F " test_generationは{T2をとり.timeit(数= 1000)}秒" ) T3 =タイマ(" test_append()" " __main__インポートtest_appendから" ) 印刷 F(" test_appendは、{T3を要します。timeit(数= 1000)}秒" ) T4 =タイマ(" test_add()" " __main__インポートからtest_add " ) 、印刷(F " 秒{t4.timeit(番号= 1000を取りtest_add)} " ) T5 =タイマ(" test_insert_zero()" " から__main__インポートtest_insert_zero " ) 、印刷(F " 秒test_insert_zeroは{t5.timeit(番号= 1000を取る)} " ) T6 =タイマ(" test_insert_end()" "__main__インポートtest_insert_endから" ) 印刷(F " 秒test_insert_endは{t6.timeit(番号= 1000を取る)} " ) T7 =タイマ(" test_extend()" " __main__インポートtest_extendから" ) 印刷(F " test_extendは{T7を取ります.timeit(数= 1000)}秒」)
私たちは、上記のコードの結果、MacOSのシステムの下で見てみましょう:
「」「 test_listは0.012904746999993222秒かかり
test_generationは0.03530399600003875秒かかり
0.0865129750000051秒かかりtest_append
0.08066114099983679秒かかりtest_add
0.30594958500023495秒かかるtest_insert_zero
0.1522782449992519秒かかりtest_insert_end
0.017534753999825625秒かかりtest_extendを 」 『』
;リストは直接式リストの使用に続いて最高の効率メソッド強いターンを使用して、と続き、かなりの両方の効率を向上するための直接的な方法を追加します。私たちは見ることができますし、スクラッチ-メソッドInsert最小効率リア効率から挿入よりも効率的に挿入!最後に、我々はあまり減少していなかった新しいリストにプロセス効率にメソッドを拡張使用して、強力なリストをオンにします。
そして、Linuxシステムの実施結果を試してみてください。
リストポップ性能試験方法
:ポップあなたができるも削除要素(デフォルトの削除最後尾の要素)最後の位置から、そして今、我々は異なる位置から2つの削除要素の性能比較をテストする必要があり、0の位置から各要素を削除することができます
timeitのインポートタイマ DEF test_pop_zero(): LST =リスト(範囲(2000 )) のための I における範囲(2000 ): lst.pop(0) DEF test_pop_end(): LST =リスト(範囲(2000 )) のための I における範囲(2000 ): lst.pop() T1 =タイマ(" test_pop_zero()"、" __main__インポートtest_pop_zeroから" ) 印刷(F 」test_pop_zeroがかかり{t1.timeit(数= 1000)}秒" ) T2 =タイマ(" test_pop_end()" " __main__インポートtest_pop_endから" ) 印刷(F " 秒test_pop_endは{t2.timeit(番号= 1000を取ります)} ")
MacOSの下でのプログラムの実行の結果に:
test_pop_zeroは0.5015365449999081かかる秒
かかるtest_pop_end 0.22170215499954793秒
その後、我々は結果Linuxシステムを試してみてください。
私たちは見ることができます:リストの最後から高い除去要素の多くは、効率よりも効率的な頭部から削除するには!
リストのinsertメソッドの小さなピット
あなたは[0,1,2,3,4,5]、[挿入メソッドを使用し、リストを生成したい場合は(insertメソッドの効率を使用して、もちろんすることははるかに低くなり、それが他の方法を使用することをお勧めします)ので、このレコードの問題、表情があります:
DEF test_insert(): LST = [] のための I における範囲(6 ): lst.insert( -1 、i)を 印刷(LST) test_insert()
結果はケースであることが判明 - 最初の要素は、最終的になってきました!
[0] [ 1 、0] 、[ 1、2 、0] [ 1、2、3 、0] [ 1、2、3、4 、0] [ 1、2、3、4、5、0]
~~~