提问者:小点点

为什么我的代码循环并显示来自for循环的随机列表?


我有一个项目是这样的:

变量:

avail_res = [6, 4]
q_active = [2, 3, 4]
score = [3, 0, 10, 5]
populations = [[1, 0, 0], [0, 0, 0], [0, 1, 1], [0, 0, 1]]

chromosomes = []
for num in score:
    if num <= avail_res[0]:
        chromosomes.append(populations[score.index(num)])
        if len(chromosomes) > 1:
            k = random.choice(chromosomes)
            chromosome_best = k
        else:
            chromosome_best = chromosomes

act = numpy.array([q_active[i] for i in numpy.flatnonzero(chromosome_best)])

目标是得到q_active中与chromosome_best中的非零值相对应的activity。 使用上面的代码,第一步是将score中的每个元素与availa_res[0]进行比较。 如果满足该条件,则获取其相应的总体并将其存储在chromosome_best中,其中非零值用于获取q_active中的相应元素。 如果chromosome_best大于1,则应随机选择要选择的对象。

问题是在得到输出之后,for循环仍然在“循环”。 所以我得到的输出是这样的:

Output = [[1, 0, 0]] # obtained from the first loop
          [0, 0, 0] # randomly selected on the 2nd iteration of for loop
          [0, 0, 0] # randomly selected on the 3rd iteration of for loop

Expected Output for Populations = [[1, 0, 0]]
Expected Output for act = [2]

我如何使我的代码免于循环,但在检查条件(<=availa_res[0])时仍然考虑循环呢?

如果[num<=avail_res[0]for num in score]:,我尝试将其设置为,但num未定义。

如有任何帮助,我们将不胜感激! 谢啦!


共1个答案

匿名用户

我希望您的代码的结构更像:

import numpy
import random

avail_res = [6, 4]
q_active = [2, 3, 4]
scores = [3, 0, 10, 5]
populations = [[1, 0, 0], [0, 0, 0], [0, 1, 1], [0, 0, 1]]

chromosomes = []

for score in scores:
    if score <= avail_res[0]:
        chromosomes.append(populations[scores.index(score)])

chromosome_best = random.choice(chromosomes)

act = numpy.array([q_active[i] for i in numpy.flatnonzero(chromosome_best)])

print(chromosome_best)
print(act)

我心中的一个未决问题是,为什么只查看availar_res[0]而不查看availar_res的其余部分--也就是说,我们需要更多地了解正在发生的事情。 另外,不需要处理chromosomes中的单个条目,特别是random.choice()函数可以处理得很好。