【发布时间】:2018-10-21 23:22:54
【问题描述】:
我正在研究遗传算法中的循环交叉。这个想法是针对给定的父 [4,1,6,2,3,5,8,9,7,10], [1,2,3,4,5,6,7,8,9,10] ,我必须从中获得一个孩子。谁能告诉我为什么它说,“TypeError: 'list' object is not callable
" 在下面的代码中。
import numpy as np
import random
from itertools import cycle, permutations
def cx(individual):
c = {i+1: individual[i] for i in range(len(individual))}
cycles = []
xx = sorted(individual)
newArray = np.array([xx,individual])
while c:
elem0 = next(iter(c)) # arbitrary starting element
this_elem = c[elem0]
next_item = c[this_elem]
cycle = []
while True:
cycle.append(this_elem)
del c[this_elem]
this_elem = next_item
if next_item in c:
next_item = c[next_item]
else:
break
cycles.append(cycle)
#return cycles
return [[d[i] for i in range(len(d))] for l in permutations(newArray) for d in ({p[n]: n for s, p in zip(c, cycle({n: i for i, n in enumerate(s)} for s in l)) for n in s},)]
print (cx([4,1,6,2,3,5,8,9,7,10]))
我希望它返回[[1, 2, 6, 4, 3, 5, 7, 8, 9, 10], [4, 1, 3, 2, 5, 6, 8, 9, 7, 10]]
【问题讨论】:
-
消息所指代码的哪一部分?
-
当我取消注释第一个返回并评论第二个返回时,它运行良好。但显然它只提供循环。但是我需要孩子!
-
cycle = []与from itertools import cycle。您对两个对象使用相同的名称。 -
通常情况下,这是完全错误的,但请注意
cycle = []在 while 循环内部,而他试图从外部调用函数?如果您来自其他语言,您希望它仍然可以工作,因为块范围是一回事。可悲的是,Python 没有 有这样的东西。处理它并正确命名您的变量,循环和循环不是正确的变量名称。
标签: arrays python-3.x numpy permutation