我正在尝试制作遗传算法,并且为了收集健身函数的值,我制作了一个类对,这样我就可以用lambda函数进行排序。这个课很简单,就是这个:
class Par(object):
def __init__(self,cromosoma,valoracion):
self.cromosoma=cromosoma
self.valoracion=valoracion
def __str__(self):
return ("Cromosoma: {0}\nTiene valoracion: {1}".format(self.cromosoma,self.valoracion))
def __repr__(self):
return ("Cromosoma: {0}\nTiene valoracion: {1}".format(self.cromosoma,self.valoracion))
所以在我用这个对染色体列表进行排序之后:
poblacionOrdenada=sorted(evaluacion, key=lambda par: par.valoracion, reverse=False)
我想选择50%的最佳但我想要重新定义的功能只是染色体而不是配对对象。那么如何在没有for的情况下获得只有染色体的列表呢?也许还有另一个lambda函数?
我不想使用for,因为我必须在不同的功能中选择几次。
答案 0 :(得分:2)
使用列表推导生成cromosoma
属性的列表:
[par.cromosoma for par in poblacionOrdenada]
获得该列表后,您可以将其用于各种不同的函数调用。
答案 1 :(得分:0)
从排序列表中选择前50%菌株的染色体:
answer = [strain.cromosoma for strain in poblacionOrdenada[:len(poblacionOrdenada)/2]]
编辑:(由于我缺乏领域知识)
如果最佳50%的菌株位于列表的末尾,请将[:len(poblacionOrdenada)/2]
与[len(poblacionOrdenada)/2:]
切换。