随机选择数组中的元素-满足条件

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

我需要我的项目帮助。以下是示例数据。

populations = [[1 1]
               [1 1]
               [1 0]
               [1 1]]

score = [0, 4, 0, 6]
avail_res = [4, 4]

代码看起来像这样:

chromosome = []
for num in score:
    if num <= avail_res[0] and num != 0:
        chromosome = populations[score.index(num)]
        print(chromosome)

        if len(chromosome) > 1:
           k = random.choice(chromosome)
           chromosome_best = [k[1]]
           print(chromosome_best)

        else:
           chromosome_best = [chromosome]
           print(chromosome_best)

目的是在所选染色体中找到最佳染色体。对于上面的示例,由于只有4(得分索引1)满足代码中的条件,因此应从总体中得出chromosome best = [1 1]。如果满足条件的得分超过一个,则代码应随机选择best_chromosome。例如,score = [4, 2, 2, 6]。我的得分中有三个元素满足条件(4、2、2)。现在,在选择总体中的best_chromosome时,代码可以选择更高的一个,即4,并给出相应的总体值。

问题是,每当我尝试运行代码时,对于所选的chromosome_best = [1 0](仅作为示例),我得到的长度是2,它对应于1和0。但是我的意图仅仅是如果染色体是length = 1 for [1 0],则为3[1 0] [1 1] [1 0]。这样,我可以使用上面的代码并随机选择。

任何帮助/建议将不胜感激!谢谢!

python python-3.x random selection
1个回答
0
投票

[我建议将chromosome设为列表列表,并可能将其重命名为chromosomes以使其清楚。

代替chromosome = populations[score.index(num)],使用chromosomes.append(populations[score.index(num)])

这是完整的代码片段:

chromosomes = []
for num in score:
    if num <= avail_res[0] and num != 0:
        chromosomes.append(populations[score.index(num)])
        print(chromosomes)

        if len(chromosomes) > 1:
           k = random.choice(chromosomes)
           chromosome_best = k[1]
           print(chromosome_best)

        else:
           chromosome_best = chromosomes
           print(chromosome_best)
© www.soinside.com 2019 - 2024. All rights reserved.