我有一个项目是这样的:
变量:
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
未定义。
如有任何帮助,我们将不胜感激! 谢啦!
我希望您的代码的结构更像:
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()
函数可以处理得很好。