从对象列表中创建属性列表

时间:2014-08-23 17:16:23

标签: python python-3.x genetic-algorithm

我正在尝试制作遗传算法,并且为了收集健身函数的值,我制作了一个类对,这样我就可以用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,因为我必须在不同的功能中选择几次。

2 个答案:

答案 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:]切换。