优化的Python字典/负索引存储
由这个问题的评论提出(我可以看到这是无关紧要的),我现在意识到使用字典来定期查询/访问的数据并不好,速度快。
我有这样的情况:
someDict = {}
someDict[(-2, -2)] = something
somedict[(3, -10)] = something else
我将坐标键存储到游戏中充当拼贴阵列的对象。这些在某些时候会是负面的,所以我不能使用列表或某种稀疏数组(我认为这是术语?)。
我可以:
加速字典查找,所以这不是问题
找到一种能够支持稀疏,负面指数的容器?
我会使用一个列表,但随后查询将从O(log n)变为O(n)以找到(x,y)处的区域。 (我想我的时间也在这里)。
没有找到相关结果
已邀请:
5 个回复
递劝臼类洪
然后,如果你想要给定“行”中的所有图块,它只是
。 您需要一些逻辑来在必要时添加辅助字典等等。提示:在标准
类型上检查
和
,或者可能是
类型。 此方法使您可以快速访问给定行中的所有切片。如果您想要给定列中的所有切片,它仍然很慢(尽管至少您不需要查看每个单元格,只需查看每一行)。但是,如果需要,您可以通过使用两个dicts(一个在列中,行顺序,另一个在行,列顺序)来解决这个问题。然后更新成为工作量的两倍,这对于大多数图块是静态的游戏可能无关紧要,但在任一方向上访问都非常容易。 如果您只需要存储数字并且大部分单元格都是0,请查看scipy的稀疏矩阵类。
穗揣
请注意,还有许多其他可能的数据结构,具体取决于您要执行的操作,读取频率,更新频率,是否通过矩形查询,是否查找最近的非空单元格等等。
爆刺疤灯
语法。 您可能需要一些协调的结构来完成您想要的任务。这是使用dicts和sets的简化示例(稍微调整用户6502的建议)。
现在只需将它包装在一个类或一个模块中,你就会离开,而且一如既往,如果它没有足够快的轮廓和测试,你会猜测。
末钉蹈泰唬
只需执行LookupArray [Index + MinimumIndex]之类的操作,其中MinimumIndex是您将使用的最小索引的绝对值。 这样,如果您的最小值是-50,那么它将映射到0. -20将映射到30,依此类推。 编辑: 另一种方法是使用如何使用索引的技巧。定义以下关键功能
这将所有正键映射到正偶数指数,将所有负数元映射到正奇数指数。这可能不实用,因为如果添加100个负键,则必须将数组扩展200。 还有一点需要注意:如果您打算进行查找并且键的数量是恒定的(或者非常缓慢地变化),请坚持使用数组。否则,词典一点也不差。
抹持奠糙驰