Python中的多类型存储阵列

Python中的多类型存储阵列,python,arrays,numpy,types,storage,Python,Arrays,Numpy,Types,Storage,我正在用Python 3.6编写一个游戏。棋盘上有一些棋子是“棋子”类的实例。棋盘上也有巨石,这是类巨石的实例。我只想把这些棋子和石头放在一个数组里,就像一个小数组 我有两个问题: 数组中存在不同类型的对象,这在numpy.array中是不可能的 我如何在我的板上表示一个空单元格,因为我不能使用一个与其他对象类型不同的对象 如何解决这两个问题?是否已经存在可以表示网格、数组并接受不同类型的对象?使用np.dtypeobject:np.arrayboard,dtype=np.dtypeobject

我正在用Python 3.6编写一个游戏。棋盘上有一些棋子是“棋子”类的实例。棋盘上也有巨石,这是类巨石的实例。我只想把这些棋子和石头放在一个数组里,就像一个小数组

我有两个问题:

数组中存在不同类型的对象,这在numpy.array中是不可能的

我如何在我的板上表示一个空单元格,因为我不能使用一个与其他对象类型不同的对象

如何解决这两个问题?是否已经存在可以表示网格、数组并接受不同类型的对象?

使用np.dtypeobject:np.arrayboard,dtype=np.dtypeobject

至于空单元格:只需将其设置为“无”


编辑:正如一些人所建议的,您可能根本不需要numpy数组。列表列表或具有元组索引的dict可能会很好地解决您的问题,并消除使用numpy的开销。

为什么不使用列表列表?我只想将这些棋子和巨石存储在一个数组中,就像numpy.array一样。但是为什么呢?为什么要在这里使用numpy.ndarray,这是用于保存类型化多维数组的专用数据结构?您可以使用结构化数组,但同样,为什么?使用普通python对象的普通列表有什么好处?您是否试图用可能有数百万行/片的N维棋盘来表示?瞧,是的,已经有一个对象这样做了,它被称为列表。一个列表列表的替代品,是一个字典。注意,您可以使用dtype=object的numpy数组,但是,为什么不在这一点上使用列表呢?numpy dtype=对象数组基本上是一个不太有用的python列表,对于象棋大小的棋盘来说,存储效率不是问题。但显示和搜索效率仍然很重要。一个数组,对象或其他,对于显示来说是好的,但是对于搜索来说不是那么好。为什么?为什么不使用列表???dtype=object的numpy.ndarray本质上是一个性能较差/有用的python列表。他问到numpy数组,可以使用它们。那为什么不呢?但是,是的,列表也应该很有效。如果有人问如何射中自己的脚,通常应该说不要射中自己的脚,相反,numpy数组是否也允许更灵活的索引,并且有一些超出标准列表所提供的功能。@user2699哪些功能与8x8 Python对象棋盘相关???这毫无意义。你不应该鼓励人们使用错误的工具。