【问题标题】:Multi-type storage array in PythonPython中的多类型存储数组
【发布时间】:2019-07-29 17:34:37
【问题描述】:

我正在用 python3.6 编写游戏。棋盘上有一些pawn,它们是“pawn”类的实例。板上还有 巨石,它们是巨石类的实例。我只想将这些棋子和巨石存储在 array 中,例如 numpy.array。

我有两个问题:

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

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

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

【问题讨论】:

  • 为什么不只使用列表列表?
  • “我只想将这些棋子和巨石存储在一个数组中,例如 numpy.array。”但为什么?为什么要在这里使用numpy.ndarray,它是用于保存类型化多维数组的专用数据结构?您可以使用结构化数组,但同样,为什么呢?使用普通的 list 和普通的 python 对象有什么好处?您是否试图用可能有数百万行/切片来表示 N 维棋盘? IOW,是的,已经有一个对象可以做到这一点,它被称为list
  • 列表列表的替代方法是字典。如果很多棋盘都是空的,那会更好。
  • 请注意,您可以使用numpy 数组和dtype=object,但同样,为什么不在此时使用列表呢?一个 numpy dtype=object 数组基本上是一个不太有用的 python list
  • 对于象棋大小的棋盘,存储效率不是问题。但显示和搜索效率仍然很重要。数组、对象或其他对象,适合显示,但不适合搜索。

标签: python arrays numpy types storage


【解决方案1】:

使用np.dtype(object):np.array(board, dtype=np.dtype(object))

至于空单元格:只需将它们设置为None


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

【讨论】:

  • 为什么?为什么不使用list???带有 dtype=object 的 numpy.ndarray 本质上是性能较差/有用的 python list
  • 他询问了 numpy 数组,并且可以使用它们。那为什么不呢?但是,是的,列表也应该可以正常工作。
  • 如果有人问如何射中自己的脚,一般应该说“不要射自己的脚,而是要
  • numpy 数组还允许更灵活的索引,并且具有超出标准列表提供的一些功能。
  • @user2699 什么功能与 Python 对象的 8x8 棋盘相关???这是没有意义的。您不应该鼓励人们使用错误的工具。
猜你喜欢
  • 2013-09-08
  • 2022-01-22
  • 2010-09-08
  • 2016-02-13
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
相关资源
最近更新 更多