Python 您建议使用哪种数据结构来处理这些数据?
我有一个网格网络,有许多节点,坐标为(x,y),我有几个人访问网络中的这些节点。例如,个人1访问节点Python 您建议使用哪种数据结构来处理这些数据?,python,data-structures,Python,Data Structures,我有一个网格网络,有许多节点,坐标为(x,y),我有几个人访问网络中的这些节点。例如,个人1访问节点(1,3),(4,5),(8,9),个人2访问(4,3),(2,5) 我需要为每个人访问这些节点(比如说在所有人的for循环中),但我不知道在python中实现这一点的最佳方法 您可以创建一个名为“个人”的类来保存该个人的所有相关信息。然后,您可以将这些单独的对象放入列表或任何您想要的数据结构中 class Individual: def __init__(self, visited):
(1,3)
,(4,5)
,(8,9)
,个人2访问(4,3)
,(2,5)
我需要为每个人访问这些节点(比如说在所有人的for循环中),但我不知道在python中实现这一点的最佳方法 您可以创建一个名为“个人”的类来保存该个人的所有相关信息。然后,您可以将这些单独的对象放入列表或任何您想要的数据结构中
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中使用dict的解决方案:
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))
一个
类个体
和节点列表
?你说“不需要创建一个类”,好像创建一个类很昂贵。我想说的是,没有必要在类更符合逻辑的地方创建字典。我认为它不昂贵,但符合逻辑。但这是一个关于范式的争论,最终是关于偏好的。我更喜欢在操作数据时使用容器,因为这些数据没有任何合理的方法,只是:数据。这里给出的类解决方案不过是列表上的包装器。我怀疑会对这些数据进行一些计算。在计算效率方面,您很少能超过python内置程序。此外,个人[“1”][i]与个人[0]之间也存在差异。已访问[i]。但正如我所说,这是一个范例偏好的事情,没有正确的答案。你可以自由地表达你关于为什么“类更具逻辑性”的论点,因为我认为恰恰相反:POf课程是关于偏好的。听起来你对班级还有其他动机。无论如何,如果问题中没有映射(key->value),我就不使用dict,并且我避免了太多的嵌套(例如,元组集合的dict列表),因为这样的代码是不可读的。当你遇到一个Individual
的实例时,你知道它是什么,但是dict将字符串映射到元组列表可能是任何东西。这是真的。这完全取决于用例。如果个体不需要通过键访问,只需迭代,那么它甚至可以是一个元组列表。您是对的,在某个时候可能会变得不清楚,当然,我认为可读代码在任何时候都比性能稍好一些。如果我要使用一个类,我可能会使用子类list
,这样我就可以充分利用这两个世界。这样,当我遇到它时,我就可以知道它的实例,但也有内置的便利。