使用python词汇在2D网格中高效地查找位置的邻居
我有一个代码,可以在二维网格中跟踪和添加对象。我启动一个包含{(x_pos,y_pos):object,…}的字典,在某个点上,我需要询问一个位置的(8)个第一邻居站点是否已满 然后我查找(x,y)字典中的对象数量迅速增加到数百万。我还需要重复搜索数百万次 我的方法如下:使用try函数、list和set compension。这两种方法似乎具有相同的时间复杂性。通过删除集合和列表对象中的None项,可能会降低速度。有什么解决办法吗?我是不是太天真了 谢谢。我的可复制代码如下所示:使用python词汇在2D网格中高效地查找位置的邻居,python,dictionary,search,simulation,associative-array,Python,Dictionary,Search,Simulation,Associative Array,我有一个代码,可以在二维网格中跟踪和添加对象。我启动一个包含{(x_pos,y_pos):object,…}的字典,在某个点上,我需要询问一个位置的(8)个第一邻居站点是否已满 然后我查找(x,y)字典中的对象数量迅速增加到数百万。我还需要重复搜索数百万次 我的方法如下:使用try函数、list和set compension。这两种方法似乎具有相同的时间复杂性。通过删除集合和列表对象中的None项,可能会降低速度。有什么解决办法吗?我是不是太天真了 谢谢。我的可复制代码如下所示: setup
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),(1,1),(2*lattice_size,0),(-1,1),(1,-1),(0,-1),(-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, setup=setup,number=10000))))
我的机器中的当前时间估计值为:
使用设置0.01990176600520499的时间
时间使用列表0.01452730999153573