【问题标题】:Make a list of attribute from a list of objects从对象列表中创建属性列表
【发布时间】:2014-10-17 08:04:42
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    使用列表推导生成仅包含 cromosoma 属性的列表:

    [par.cromosoma for par in poblacionOrdenada]
    

    获得该列表后,您可以将其用于各种不同的函数调用。

    【讨论】:

    • 当然……多么愚蠢的问题!我正在尝试更困难的东西。记得先尝试更简单的! TY
    【解决方案2】:

    从排序列表中选择前 50% 菌株的染色体:

    answer = [strain.cromosoma for strain in poblacionOrdenada[:len(poblacionOrdenada)/2]]
    

    编辑:(因为我缺乏领域知识)

    如果最好的 50% 菌株在列表末尾,则将 [:len(poblacionOrdenada)/2] 切换为 [len(poblacionOrdenada)/2:]

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 2022-01-17
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多