【发布时间】:2013-03-22 22:54:41
【问题描述】:
我正在pygame中用python(2.7)编写一个简单的游戏。在这个游戏中,我必须存储 2D 坐标。这些项目的数量将从0开始,每一步增加2。它们将增加到〜6000。在每个步骤中,我必须检查其中是否有 9 个特定坐标。我尝试将它们简单地存储在 (x,y) 的列表中,但在这样的列表中搜索效率不高。
如何存储这些坐标以便在它们之间进行更高效的搜索?
我在每个步骤中尝试做的事情:
# Assuming:
myList = []
co1 = (12.3,20.2) # and so on..
valuesToCheck = [co1,co2,co3,co4,co5,co6,co7,co8,co9]
# In each step:
# Adding 2 coordinates
myList.append((x1,y1))
myList.append((x2,y2))
# Searching 9 specific coordinates among all
for coordinate in valuesToCheck:
if coordinate in myList:
print "Hit!"
break
# Note that the valuesToCheck will change in each step.
del valuesToCheck[0]
valuesToCheck.append(co10)
坐标是浮点数,它们的最大值是有限的。它们从 (0.0,0.0) 开始到 (1200.0,700.0)。
我已经对此进行了搜索,但存储的值是字符串或常量。
【问题讨论】:
-
在坐标集上你需要做的唯一搜索就是这9个特殊坐标是否在里面?这 9 个特殊坐标是否发生变化(如果没有,为什么不丢弃不匹配的 2D 点)?您还需要对您的积分进行任何其他搜索吗?
-
正如我在代码部分添加的那样,这 9 个特殊坐标也在每一步中发生变化。不过,没有其他关于积分的搜索。
-
在这种情况下,有这么多项目,我会保持简单并使用字典。 stackoverflow.com/questions/1938614/…
-
元组是可散列且不可变的,因此将它们放入一个集合中检查是否存在是可行的。或者,如果您需要关联一个值,则可以使用字典。
-
坐标总是整数吗?而且,它们是否总是受到最大值/最小值的限制? (例如,它们永远不会小于 (0,0) 或大于 (500,500))
标签: python algorithm search coordinates