我有一个玩具Python项目,它涉及到模拟对象在网格中的移动.我的限制是:

  • 这些对象是我自己任意定义的类
  • 对象可以改变在网格上的位置
  • 可以添加或删除对象
  • 可以更新对象的属性
  • 我必须遍历所有这样的对象
  • 对象的大小可能不是微不足道的(相对于我的机器的能力)
  • 对象必须能够"看到"网格上占用的空间(也就是说,网格必须可由所有对象访问)

对于我来说,在Python中存储此类对象最有效的数据类型/容器是什么?


我现在的 idea 是:

  • 类型对象的Numpy数组-这似乎是最好的情况,因为我可以通过对象的位置引用它们,但我的理解是,Numpy并不是真正用于此用例的,可能不是特别有效.这样设置也不是特别直观.
  • 用于对象的列表和用于共享位置更新的NumPy数组--这允许对对象进行干净的迭代,我可以在类属性内和NumPy数组上更新位置,但是要通过位置来具体引用对象并不容易
  • 对象的字典和共享位置更新的NumPy数组-这将允许我通过位置(键)引用对象并更新主数组,以便共享这些更改的知识,但随后保留对象移动位置是奇怪的(我认为它们需要复制到新的键)

我觉得我可能错过了一些简单的东西,除非麻木网格真的是最好的 Select .

推荐答案

总结上面的 comments ,因为没有人发布答案: 一般来说,由于NumPy数组是为数值计算而设计的,因此与列表列表相比,将它们用于对象类型几乎没有什么好处.然而,This link更详细地阐述了这一点的细微差别.那么,Python实际上没有比列表列表更好的选项,但这仍然可以实现目标,并允许按位置进行引用.可以通过使用虚拟占位符初始化网格形状,然后更新列表中每个位置存在的内容来维护网格形状,而不是直接删除项目.

Python相关问答推荐

Flask Jinja2如果语句总是计算为false&

python—telegraph—bot send_voice发送空文件

在numpy数组中寻找楼梯状 struct

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

如何使用大量常量优化代码?

来自Airflow Connection的额外参数

修改.pdb文件中的值并另存为新的

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)

Groupby并在组内比较单独行上的两个时间戳

当lambda函数作为参数传递时,pyo3执行

按最大属性值Django对对象进行排序

如何导入与我试图从该目录之外运行的文件位于同一目录中的Python文件?

Python:打开名称中带有最新时间戳的特定文件

给定Pandas 列DataFrame中的一个值,在其他DataFrame中 Select 与该值最接近的N行

如何在pandas DataFrame列中保持一个只增加的数字序列?

真正的Python散布函数

向量化数据帧中的折叠过程

用Gekko拟合两个总体的测量值

识别相同的重复值-Pandas

偏移量是否有默认值?