Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 元组字典或元组列表_Python_List_Dictionary_Tuples_Time Complexity - Fatal编程技术网

Python 元组字典或元组列表

Python 元组字典或元组列表,python,list,dictionary,tuples,time-complexity,Python,List,Dictionary,Tuples,Time Complexity,我有一个用例,我需要存储地理坐标(纬度和经度)以及这些坐标到特定固定点的距离。 我可以通过以下方式做到这一点: 将元组列表创建为[(lat1,long1,distance),(lat2,long2,distance),(lat3,long3,distance),…] 或 创建一个字典,其中坐标元组作为键,每个坐标对应的距离作为值{(lat1,long1):距离,(lat2,long2):距离,(lat3,long3):距离,…} 我的业务用例要求我获取与固定点之间最小距离的前10个坐标,这需要根

我有一个用例,我需要存储地理坐标(纬度和经度)以及这些坐标到特定固定点的距离。 我可以通过以下方式做到这一点:

  • 将元组列表创建为[(lat1,long1,distance),(lat2,long2,distance),(lat3,long3,distance),…] 或
  • 创建一个字典,其中坐标元组作为键,每个坐标对应的距离作为值{(lat1,long1):距离,(lat2,long2):距离,(lat3,long3):距离,…}
  • 我的业务用例要求我获取与固定点之间最小距离的前10个坐标,这需要根据距离进行排序


    问题-那么对于这个排序用例,字典还是元组列表,哪种数据结构最好?我知道,当我们知道获取值所需的确切密钥时,字典对于O(1)时间复杂度是有好处的。但是对于这种基于距离排序的场景,我是否可以通过将细节存储在字典中而不是存储在元组列表中来获得性能优势?

    “我是否可以获得性能优势”:不,您不会。常规词典甚至不记录顺序,因此
    {'key1':'value1',key2','value2'}
    {'key2':'value2','key1':'value1'相同
    ,因此不管怎样,您最终都会以列表的形式获得dict的值。我认为在您的情况下,字典更适合您的情况,因为您可以立即调用键(距离),您不会看到太大的性能差异,但代码可能会更紧凑。如果点集是固定的,您可以简单地按距离对列表进行排序,并获取前10个元素。如果您要随时间添加和删除点,请使用优先级队列(在
    heapq
    模块的文档中可以找到实现一个dict的方法)。@Ironkey一个dict允许您获得给定距离的单个点(或给定点的距离,取决于映射方向)。OP需要10个最小距离。