我有以下类型的列表:
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)]
Run Code Online (Sandbox Code Playgroud)
您可以将此列表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)]
Run Code Online (Sandbox Code Playgroud)
你可以尝试这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
这是假设"作为配偶"是一对一的关系.
归档时间: |
|
查看次数: |
343 次 |
最近记录: |