我是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 = []
我明白了:
当我将两个列表放入外部循环中时,它们在每次迭代后都会清空。如果将它们放在外循环之外,它们会继续添加值。为什么会这样?
答案 0 :(得分:2)
当列表分配在外部循环之外(之前)时,仅在循环执行开始时将它们设置为空。因此,在所有迭代中,每个列表中添加的每个值都将保留在那里。
当列表分配在外循环内部时,每次外循环迭代时,它们都设置为空。因此,添加到其中一个列表的每个值仅会保留,直到下一次迭代清除列表为止。
答案 1 :(得分:0)
1)如果将列表放在外循环之外,则它们不会在外循环迭代中重新初始化/清空,因此累积所有附加值时它们会变得越来越大
2)如果将列表放在外循环中,则它们会在每次迭代时重新初始化/清空,因此它们仅在一个迭代时间内累积附加数据