如何解决通过python字典有效地在2D网格中找到位置的邻居
我有一个代码,可以在其中跟踪和添加2D网格中的对象。我启动了一个包含{{x_pos,y_pos):object,...}的字典。在某个时候,我需要问一个位置的(8)个第一相邻站点是否已满。
然后我查看(x,y)周围的位置。字典中的对象数量迅速增长到数百万个。我还需要重复搜索数百万次。
下面是我使用try函数并列出并设置理解的方法。两种方法似乎具有相同的时间复杂度。通过删除set和list对象中的无项,我可能会变慢。有什么解决方法吗?我太天真了吗?
谢谢。我的可复制代码如下:
setup = """\
lattice_size = 500
from numpy import random
dic = {(i,j):random.randint(0,high= 9,size=1)[0] for i in range(int(-lattice_size/2),int(lattice_size/2)) for j in range(int(-lattice_size/2),int(lattice_size/2))}
keys_l = [(0,1),(1,0),(2*lattice_size,(-1,-1),(0,(-2*lattice_size,0)]
def try_key(dictionary,key):
try:
return (key,dictionary[key])
except:
pass
"""
import timeit
set_fun = """\
tuple_list = {try_key(dic,key) for key in keys_l}
tuple_list.discard(None)
"""
list_fun = """\
tuple_list = []
for pos in keys_l:
try:
tuple_aux = (pos,dic[pos])
tuple_list.append(tuple_aux)
except:
pass
"""
print('Time using set {}'.format(min(timeit.repeat(stmt=set_fun,setup=setup,number=10000))))
print('Time using list {}'.format(min(timeit.repeat(stmt=list_fun,number=10000))))
我的机器上当前的时间估计为:
使用设置时间0.01990176600520499
使用列表0.01452730999153573的时间
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。