クラス インスタンスの完全なリストから始めて、属性値に関するいくつかの条件を満たすクラス インスタンスのサブリストを作成するにはどうすればよいですか?
たとえば、クラス Person() のインスタンスのリストがあります。これらの人は多くの属性を持っており、そのうちの一意の識別子である ID と、住んでいる世帯の識別子である HH_ID があります。同じ世帯に住んでいて、同じ HH_ID を持つすべての人を接続したいと考えています。「つながる」とは、 を使用して、すべての世帯メンバー間にエッジを作成することを意味しnetworkx
ます。これを行うには、これらの人を特定して「サブリスト」に入れ、何らかのアルゴリズムで処理してそれらをすべて結び付ける必要があります。どうすればこれを達成できますか?
他のより複雑な目的のためにこれを行うための一般的なツールも必要です (たとえば、15 歳から 20 歳までの N 人をランダムに接続するなど)。 HH_ID したがって、次のようなものがあります。
ID HH_ID
0 0
1 0
2 0
3 1
4 1
5 2
ここで、最初の世帯は [0,1,2] の人で構成され、2 番目の世帯は [3,4] の人で構成されます...
この家庭の問題については、pairwise
イテレータ レシピを使用してみました ( itertools のドキュメントは次のようになります。
import pairwise
i = pairwise(personList)
for p in personList:
toConnectList = [p]
p1,p2 = i.next()
while p1.hh_id == p2_hh_id
toConnectList.append(p2)
p1,p2 = i.next()
# connect all persons in toConnectList
しかし、明らかにこれは機能しません。私の反復子は、隣接する 2 人の人物が一致しなくi
なるまで停止し、そこから次の人のために再開するからです。hh_id
たとえば、上記の例の人物の場合、for
ループで人物 1 になると、イテレーターは人物 2 と 3 の比較を開始しますが、for ループで人物 3 に直接ジャンプしてイテレーターを開始させる何らかの方法が必要になります。人物 3 と 4 を比較します。あまり明確に見えなくても、この例が少し明確になることを願っています...
より一般的には、属性値に関するいくつかの条件を満たす人のサブリストを作成する方法、おそらく効率的な方法が必要です (私は約 150000 人を持っています)。