每次迭代后清空列表

时间:2019-08-31 22:18:02

标签: python

我是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 = [] 

我明白了:

enter image description here

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

averaged_precision = []
averaged_recall = [] 

我明白了:

enter image description here

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

1)如果将列表放在外循环之外,则它们不会在外循环迭代中重新初始化/清空,因此累积所有附加值时它们会变得越来越大

2)如果将列表放在外循环中,则它们会在每次迭代时重新初始化/清空,因此它们仅在一个迭代时间内累积附加数据