私は次の種類のリストを持っています:
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
ます。属性に持っていない個人が必要です。それは意味がありますか?
このリストを並べ替えて、最初の個人が最後の個人と一致し、2番目の個人が最後から2番目の個人と一致するようにします...属性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
これは、「仲間であること」が1対1の関係であるという仮定の下にあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加