Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在嵌套列表中翻转位_Python 3.x_Mutation - Fatal编程技术网

Python 3.x 在嵌套列表中翻转位

Python 3.x 在嵌套列表中翻转位,python-3.x,mutation,Python 3.x,Mutation,我有一个项目,我必须使用遗传算法的位翻转变异 到目前为止,我的代码如下所示: def mutation(pop, mr): for i in range(len(pop)): if (random.random() < mr): if (pop[i] == 1): pop[i] = 0 else: pop[i] = 1 else:

我有一个项目,我必须使用遗传算法的位翻转变异

到目前为止,我的代码如下所示:

def mutation(pop, mr):
    for i in range(len(pop)):
        if (random.random() < mr):
            if (pop[i] == 1):
                pop[i] = 0
            else:
                pop[i] = 1
        else:
            pop[i] = pop[i]
    return pop

mut = mutation(populations, 0.3)
print(mut)
我正在做的是将随机生成的数字分配给
群体中的元素
,并检查它是否小于
突变率
。如果是,那么将发生
位翻转突变
,如果不是,它将保持原样。对于
群体1
的情况,如果
群体1指数2
小于突变率,则应变为
[1,0]
。对于
群体_2索引3
,如果小于突变率,则应变为
[0]
。这是
变异函数的目标

有谁能帮我改变我目前掌握的代码,以适应类似于1的情况吗?我认为到目前为止我的代码只适用于U2


如有任何帮助/建议/阅读,将不胜感激!谢谢

你可以使用列表理解来做你想做的事。只有当
rI不确定
population\u 1
索引2中的值为
[1,1]
时,
pop
中的值才会更新。在这种情况下,它们应该变成
[0,0]
?@DavideBrex如果它满足条件,那么它应该。[0,0]也是如此。对于总体_1索引1,如果它满足突变条件,则应该是这样。[0,0](如果生成的random小于[1,1],则应为[1,1])。感谢先生!我将尝试了解您提供的代码发生了什么。我更新了答案,现在我将在一分钟内解释代码感谢您的解释。非常感谢!
populations_1 = [[1, 0], [1, 1], [0, 1], [1, 0]] 
populations_2 = [[1], [1], [0], [1]]
def mutation(pop, mr):
    for i in range(len(pop)):
        r = random.random()
        print(r) # you can remove this line, it is only for testing
        if r < mr:
            pop[i] = [1 if a == 0  else 0 for a in pop[i]]
    return pop
populations_1 = [[1, 0], [1, 1], [0, 1], [1, 0], [0,0]] 
mut = mutation(populations_1, 0.3)
print(mut)

#random number for each iteration
0.3952226177233832
0.11290933711515283
0.08131952363738537
0.8489702326753509
0.9598842135077205
#output:
[[1, 0], [0, 0], [1, 0], [1, 0], [0, 0]]
populations_2 = [[1], [1], [0], [1]]
mut = mutation(populations_2, 0.3)
print(mut)


0.3846024893833684
0.7680389523799874
0.19371896835988422
0.008814288533701364
[[1], [1], [1], [0]]