私は(x、y)座標の数字ノードを持つグリッドネットワークを持っており、ネットワーク内のこれらのノードを訪れる人は2人います。例えば、個人1はノード(1,3)
,(4,5)
,(8,9)
を訪問し、個々の2人は(4,3)
,(2,5)
を訪問する。このデータを扱うために提案するデータ構造はどれですか?
私はこれらのノードに個人ごとにアクセスする必要があります(すべての人のためにforループを言います)が、私はPythonでそれを行う最良の方法を知らない。
私は(x、y)座標の数字ノードを持つグリッドネットワークを持っており、ネットワーク内のこれらのノードを訪れる人は2人います。例えば、個人1はノード(1,3)
,(4,5)
,(8,9)
を訪問し、個々の2人は(4,3)
,(2,5)
を訪問する。このデータを扱うために提案するデータ構造はどれですか?
私はこれらのノードに個人ごとにアクセスする必要があります(すべての人のためにforループを言います)が、私はPythonでそれを行う最良の方法を知らない。
Individualと呼ばれるクラスを作成して、その個人に関するすべての関連情報を保持することができます。それらのIndividualオブジェクトをリストに入れるか、必要なデータ構造にすることができます。
class Individual:
def __init__(self, visited):
self.visited = visited # type: list[tuple]
def add_visit(self, node):
self.visited.append(node)
individuals = [
Individual([(1, 3), (4, 5), (8, 9)]),
Individual([(4, 3), (2, 5)])
]
for individual in individuals:
pass # do stuff
その他は、このタスクのためのクラスを提案し、私はあなたが普通の辞書(dict
)、またはdefaultdict
としたほうが良いと思います。メソッドを持たず、ノードのリストのみを含むクラスを作成する必要はありません。特に、Pythonにこのような素晴らしいコンテナがある場合は、 Pythonの3の辞書と
ソリューション:
individuals = {}
individuals["1"] = [(1, 3), (4, 5), (8, 9)]
individuals["2"] = [(4, 3), (2, 5)]
for ind, node in individuals.items():
print(ind, node)
individuals["2"].append((6, 7))
あなたは*クラスを作成する必要はありません*と言うのは、クラスを作成するのが高価だったようです。私は、クラスがより論理的な辞書を作成する必要はないと言っています。 – zvone
私はそれを高価ではなく論理的なものと言います。しかし、これは最終的には嗜好に関するパラダイムに関する議論である。私は、実用的な方法を持たないデータで動作するときにはコンテナを使用するほうが好きです。それはちょうどデータです。ここに示したクラスの解決策は、リストのラッパーではありません。そして私は、データを使った計算がいくつかあると思います。 Pythonの組み込み関数を計算で効率よく実行することはめったにできません。また、個体[1] [i]と個体[0] .visited [i]。しかし、私が言ったように、それはパラダイムの好みのものであり、正しい答えはありません。 –
私はまったく逆だと思うので、なぜ "クラスはもっと論理的"なのか自由にあなたの議論を表現することができます:P –
'nodes'のリストを'クラスIndividual'? –