根据第一个值找到10个最大的元组

时间:2017-08-18 18:45:42

标签: python tuples

对不起,措辞,最大的元组,我的意思是元组中的第一个值很大。

    AccuList = list()
    Result = tuple()
    for V in itertools.combinations(variable_list, 5):
            variable_to_use = list(V)
            for i in range(0,100):
                Accuracy = #some code to calculate
                AccuList.append(Accuracy)
            #Mean    
            M = np.mean(AccuList)
            #Std
            D = np.std(AccuList,ddof=1)
            Result = (M,D, variable_to_use)

我想找到10个'结果'元组,其中包含10个最大的M 仅通过其中的M值对元组进行排名。 如果我需要一个for循环来实现这一点,那么for循环应该在哪里(缩进的地方)

2 个答案:

答案 0 :(得分:0)

让我们保存结果:

acculist = []
# no need to define `result = tuple()` here.
result_list = []  # make a list to store results in

for v in itertools.combinations(variable_list, 5):
    for i in range(0, 100):
        ...
    m = np.mean(acculist)
    d = np.std(acculist, ddof=1)
    result = (m, d, list(v))
    result_list.append(result)  # add each result to the list

然后对列表进行排序。元组已经按第一个元素排序(然后是第二个,然后是第三个,......,然后是第n个),所以我们只需要反转顺序以获得降序排序而不是升序排序。

result_list.sort(reverse=True)  # descending instead of ascending

并切掉前十项

top_ten = result_list[:10]

答案 1 :(得分:0)

将您的元素添加到堆中,从堆中弹出10个最小的项。标准库中的heapq模块使这一点变得特别简单。

import heapq

results = []
for V in itertools.combinations(variable_list, 5):
    variable_to_use = list(V)
    accu_list = [ ... for i in range(100)]
    m = np.mean(accu_list)
    d = np.std(accu_list, ddof=1)
    results.append((m, d, variable_to_use))

heapq.heapify(results)
ten_largest = heapq.nlargest(10, results)

这明显快于排序。预先给定所有项目的堆只需O(n)次,而排序需要O(n lg n)次。从堆中获取常量数量的元素只需要额外的O(lg n)时间,因此总体复杂度仍为O(n)