2017-02-27 19 views
0

要するに、指定された長さ(500,1000,10000)ごとに100個のランダムな整数リストを作成し、結果を格納することによっていくつかの関数をテストする必要があります。最終的には、各テストの平均実行時間を計算できるようにする必要がありますが、まだコードを使ってそれを実現していません。必要なリストの長さの値を格納するために辞書を作成テスト結果をPythonに格納する

  1. :私は次のことを想定し

    は、このアプローチする最良の方法でした。

  2. その辞書の各値に対して、新しい乱数リスト(list_tests)を生成します。
  3. 各機能テスト(test_results)の結果を格納する別の辞書を作成します。
  4. whileループを使用して、各長さのリストを100個作成します。
  5. whileループで各関数を呼び出し、各結果を結果辞書に格納してテストを実行します。

プログラムが実行するように見えるが、私はカップルの問題を抱えている:

  • それは他のlist_tests値に達することはありません。それは私が(メインのループと間違って行ってきたところ、私は非常に)理解していないtest_results辞書

の値を上書きしています500

  • を超えて進行することはありません。これらの機能を実現可能かどうかテストするプロセスはありますか?もしそうなら、私はこのループ問題をどのように解決できるかについて迷っています。あなたが提供できるあらゆる援助のために事前にありがとう!ここで

    は私のプログラムは次のとおりです。私はあなたが47

    行で

    found = True 
    

    代わりの

    found == True 
    

    を意味だと思う

    import time 
    import random 
    
    
    def sequential_search(a_list, item): 
        start = time.time() 
        pos = 0 
        found = False 
    
        while pos < len(a_list) and not found: 
         if a_list[pos] == item: 
          found = True 
         else: 
          pos = pos+1 
    
        end = time.time() 
    
        return found, end-start 
    
    
    def ordered_sequential_search(a_list, item): 
        start = time.time() 
        pos = 0 
        found = False 
        stop = False 
    
        while pos < len(a_list) and not found and not stop: 
         if a_list[pos] == item: 
          found == True 
         else: 
          if a_list[pos] > item: 
           stop = True 
        else: 
         pos = pos+1 
    
        end = time.time() 
    
        return found, end-start 
    
    
    def num_gen(value): 
        myrandom = random.sample(xrange(0, value), value) 
        return myrandom 
    
    
    def main(): 
        #new_list = num_gen(10000) 
        #print(sequential_search(new_list, -1)) 
    
        list_tests = {'t500': 500, 't1000': 1000, 't10000': 10000} 
    
        for i in list_tests.values(): 
         new_list = num_gen(i) 
         count = 0 
         test_results = {'seq': 0, 'ordseq': 0} 
         while count < 100: 
          test_results['seq'] += sequential_search(new_list, -1)[1] 
          test_results['ordseq'] += ordered_sequential_search(new_list, -1)[1] 
          count += 1 
    
    
    if __name__ == '__main__': 
        main() 
    
  • +0

    "for"ループのほうがはるかに適切です –

    答えて

    1

    はまた、ループの多くのクリーナーですこれを試してみてください。あなたの探しているもの:

    +0

    これはありがたいことですが、検索機能自体は正確には私の後ろではありません。私は、これらの検索関数のそれぞれに対して複数の入力リストを生成する方法を検討しようとしています。 – notaprogrammr

    +0

    値リストを関数に渡そうとしていますか? –

    +0

    はい、num_gen関数で作成したリストを各検索関数に渡して、500、1000、10000の各必要な長さに100リストを作成しようとしています。 – notaprogrammr

    0

    値を上書きするキーが指定されているため、これは辞書の値を上書きしています。あなたがしなければならない辞書に追加していません。

    whileループが壊れていない可能性があります。その理由は、forループが別の値に反復できないためです。

    関連する問題