测量时间M次的功能

时间:2016-12-28 13:59:47

标签: python function time itertools

我要测量下面的函数需要多长时间来表示:C在范围[0,10]中,列表N中的数字。(每个C的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)]

1 个答案:

答案 0 :(得分: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))