2016-12-28 67 views
0

我要測量下面的函數需要多少時間來表示:範圍[0,10]中的C與列表N中的數字(每個C的M個測量)。測量時間M次的函數

import itertools 
def amount(C): 
    N = [1, 2, 5] 
    #N = list(N) 
    N = sorted(N) 
    while C < max(N): 
     N.remove(max(N)) 
    res = [] 
    for i in range(1, C): 
     for j in list(itertools.combinations_with_replacement(N, i)): 
      res.append(sum(list(j))) 
    m = 0 
    for z in range (0, len(res)): 
     if res[z] == C: 
      m += 1 
    if N[0] == 1: 
     return m + 1 
    else: 
     return m 

編輯:

import itertools 
def amount(C): 
    N = [1, 2, 5] 
    res = [] 
    for i in range(1, C): 
     for j in list(itertools.combinations_with_replacement(N, i)): 
      res.append(sum(list(j))) 
    m = 0 
    for z in range (0, len(res)): 
     if res[z] == C: 
      m += 1 
    if N[0] == 1: 
     return m + 1 
    else: 
     return m 

我想作10次測量,然後採取所有這些測量的例子中位數。

還有就是我的代碼,但不幸的東西不能正常工作,我不知道什麼是錯的:

import time 
def time_counter(amount, n=11, M=11): 
    res = list(range(n)) 
    def count_once(): 
     start = time.perf_counter() 
     amount(res) 
     return time.perf_counter() - start 
    return [count_once() for m in range(M)] 
+0

_「但遺憾的事情不能正常工作」 _。你怎麼知道的?你是否收到錯誤信息?如果是這樣,那是什麼?你是否獲得了你不期望的產出?如果是這樣,你會得到什麼產出,以及你期望的產出?你沒有得到任何產出?可能是因爲你實際上並沒有在任何時候調用'time_counter'。或者,如果您打電話給'time_counter',但沒有向我們展示您的所有代碼,請實際向我們展示您的所有代碼。 – Kevin

+0

它可以節省您一些努力來使用[timeit](https://docs.python.org/2/library/timeit.html),而不是編寫自己的函數計時代碼。 – Kevin

+0

我收到一條錯誤消息,它是:**只能連接列表(不是「int」)到列表**。 這就是我所有的代碼。只有「量」功能,然後是那個應該測量時間的功能。 – Hendrra

回答

1

您再次傳遞一個列表,並嘗試做range(1,C)其中C是一個列表

這裏是你的程序應該如何

import itertools 
import time  
def amount(C): 
    N = [1, 2, 5] 
    res = [] 
    for i in range(1, C): 
     for j in list(itertools.combinations_with_replacement(N, i)): 
      res.append(sum(list(j))) 
    m = 0 
    for z in range (0, len(res)): 
     if res[z] == C: 
      m += 1 
    if N[0] == 1: 
     return m + 1 
    else: 
     return m 

def time_counter(amount, n=11, M=11): 
    res = list(range(n)) 
    def count_once(c): 
     start = time.perf_counter() 
     amount(c) 
     return time.perf_counter() - start 
    return [count_once(m) for m in range(M)] 

#testing 
print(time_counter(amount)) 
+0

非常感謝您的幫助。不過,我不明白一件事/ – Hendrra

+0

(對不起,本週我使用不同的鍵盤,這很難)。正如我寫的,我不明白一個人的想法。該函數返回一個C和C = 11的11個測量結果,是的? – Hendrra

+0

這解決了你在問題中遇到的問題。我沒有看到邏輯。邏輯上的問題將使它成爲一個非常具體的問題,並不會成爲符合條件的問題。 –