Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python词汇在2D网格中高效地查找位置的邻居_Python_Dictionary_Search_Simulation_Associative Array - Fatal编程技术网

使用python词汇在2D网格中高效地查找位置的邻居

使用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

我有一个代码,可以在二维网格中跟踪和添加对象。我启动一个包含{(x_pos,y_pos):object,…}的字典,在某个点上,我需要询问一个位置的(8)个第一邻居站点是否已满

然后我查找(x,y)字典中的对象数量迅速增加到数百万。我还需要重复搜索数百万次

我的方法如下:使用try函数、list和set compension。这两种方法似乎具有相同的时间复杂性。通过删除集合和列表对象中的None项,可能会降低速度。有什么解决办法吗?我是不是太天真了

谢谢。我的可复制代码如下所示:


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