与for循环进行Python列表交互的问题

问题描述 投票:1回答:1

我正在尝试构建的遗传特征优化算法遇到问题。想法是测试特定的特征组合,如果使用这些特征的模型精度高于先前的最大值,则特征组合将替换先前的最大组合。通过以这种方式遍历剩余的潜在特征,最终组合应该是给定特征向量大小的特征的最佳组合。当前,实现此目的的代码如下:

def mutate_features(features, feature):
    new_features = features
    index = random.randint(0,len(features)-1)
    new_features[index] = feature
    return new_features

def run_series(n, f_list, df):
    features_list = []
    results_list = []
    max_results_list = [[0,0,0,0,0]]
    max_feature_list = []
    features = [0,0,0,0,1]
    for i in range(0,5):  # 5 has just been chosen as the range for testing purposes
        results = run_algorithm(df, f_list, features)
        features_list.append(features)
        results_list.append(results)
        if (check_result_vector(max_results_list, results)):
            max_results_list.append(results)
            max_feature_list.append(features)
        else:
            print("Revert to previous :" +str(max_feature_list[-1]))
            features = max_feature_list[-1]
        features = mutate_features(features, f_list[i])
        print("Feature List = " +str(features_list))
        print("Results List = " +str(results_list))
        print("Max Results List = " +str(max_results_list))
        print("Max Feature List = "+str(max_feature_list))

此代码的输出已包含在下面;

Output单击以放大或放大照片] >>

我不理解的部分是max_feature_listfeature_list的输出。

如果在for循环内通过使用.append()将任何内容添加到max_feature_listfeature_list中,似乎已将列表中所有已经成为成员的项更改为与最新添加的项相同。名单。我可能未完全了解与此相关的语法/逻辑,因此,非常感谢您提供有关程序为何执行此操作的任何反馈。

我正在尝试构建的遗传特征优化算法遇到问题。这个想法是,将测试特征的特定组合,以及是否使用...

python list append
1个回答
1
投票

发生这种情况是因为您在features函数中更改了mutate_features的值,然后,由于max_feature_list的追加是通过引用进行的,因此max_feature_list中的填充值也正在更改,因为它们的基础值已更改。防止这种行为的一种方法是在deepcopy内单击features mutate_features,根据需要更改复制的要素,然后将其返回。例如:

© www.soinside.com 2019 - 2024. All rights reserved.