首页 > 解决方案 > 每次迭代后清空列表

问题描述

我是 Python 新手。我有以下代码片段:

kf = KFold(n_splits=5)

averaged_precision_for_t_knn = []
averaged_recall_for_t_knn = []
for t in range(1,6,1):
    print(t)
    averaged_precision = []
    averaged_recall = []
    for trainset, testset in kf.split(data):
        algo.fit(trainset)
        predictions = algo.test(testset)
        precision, recall = compute_precision_recall(predictions, t, 4)

        # average over all users

        averaged_precision.append(sum(precision for precision in precision.values()) / len(precision))
        averaged_recall.append(sum(recall for recall in recall.values()) / len(recall))

        print(averaged_precision)
        print(averaged_recall)
    averaged_precision_for_t_knn.append(np.mean(averaged_precision))
    averaged_recall_for_t_knn.append(np.mean(averaged_recall))

如果我将这两个列表放在外循环中:

averaged_precision = []
averaged_recall = [] 

我明白了:

在此处输入图像描述

如果我将这两个列表放在外循环中:

averaged_precision = []
averaged_recall = [] 

我明白了:

在此处输入图像描述

当我将这两个列表放在外循环中时,它们在每次迭代后都将自己清空。而如果我将它们放在外循环之外,它们会继续添加值。这是为什么?

标签: python

解决方案


当列表分配在外部循环之外(之前)时,它们仅在循环执行开始时设置为空。因此,添加任一列表的每个值在所有迭代中都保留在那里。

当列表分配在外循环内时,每次外循环迭代时它们都设置为空。因此,添加到其中一个列表的每个值仅保留到下一次迭代清除列表。


推荐阅读