【问题标题】:Emptying lists after each iteration每次迭代后清空列表
【发布时间】:2020-01-04 14:32:43
【问题描述】:

我是 Python 新手。我有以下代码sn-p:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢本!你能给我推荐一个网站来了解这个特定问题吗?
    • 我没有具体的网站,但是如果您搜索“nested loops tutorial Python”,您可能会找到一些不错的资源。不过,这不是 Python 特有的问题。您几乎会在任何编程语言中遇到这种情况。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2014-01-30
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2013-02-07
    • 2023-04-03
    相关资源
    最近更新 更多