gpt4 book ai didi

python - 在python中存储和搜索坐标的有效方法

转载 作者:太空狗 更新时间:2023-10-30 01:55:05 25 4
gpt4 key购买 nike

我正在 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)

坐标是 float ,其最大值是有限制的。它们从 (0.0,0.0) 开始到 (1200.0,700.0)。

我已经对此进行了搜索,但存储的值是字符串或常数。

最佳答案

维护 set在您的列表旁边,或者如果您没有其他用途,则完全替换该列表。成员检查和添加是O(1) on average对于集合,与仅使用列表的 O(N^2) 相比,您的整体算法将是 O(N)。

myList = []
mySet = set()
co1 = (12,20) # 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))
mySet.add((x1, y1))
mySet.add((x2, y2))
# Searching 9 specific coordinates among all
for coordinate in valuesToCheck:
if coordinate in mySet:
print "Hit!"
break
# Note that the valuesToCheck will change in each step.

del valuesToCheck[0]
valuesToCheck.append(co10)

关于python - 在python中存储和搜索坐标的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com