我有以下种类的清单:
class Ind(object):
def __init__(self,ID,mate):
self.ID=ID
self.mate=mate
population=[Ind(8,None), Ind(1,2), Ind(20,3), Ind(2,1), Ind(12,None), Ind(3,20), Ind(10,11), Ind(11,10)]
您可以将此列表population
视为所有具有的个人的总体ID
。其中一些人有一个mate
(出现在相同人口或相同列表中的个人)。该mate
值实际上ID
是该队友的!因此,如果存在的一个实例Ind
哪些属性ID
等于12和mate
等于34,那么就必须在其列表中的个体ID
等于34,其mate
等于12个人没有一个mate
具有None
在mate
属性。是否有意义?
我想对这个列表进行排序,以便第一个个体与最后一个个体交配,第二个个体与倒数第二个个体交配,依此类推...属性mate
等于的个体None
应该位于列表的中间。
有许多可能的输出适合我想要的。这是上述列表的这些输出的一个示例:
population=[Ind(1,2), Ind(20,3), Ind(10,11), Ind(8,None), Ind(12,None), Ind(11,10), Ind(3,20), Ind(2,1)]
您可以尝试这样的事情:
def custom_sort(population):
pop_dict = { ind.ID: ind for ind in population }
start = []
nones = []
end = []
for ind in population:
if ind.mate is None:
nones.append(ind)
elif pop_dict[ind.mate] not in start:
start.insert(0, ind)
end.append(pop_dict[ind.mate])
return start + nones + end
这是基于“成为伴侣”是一对一关系的假设。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句