最快的交叉方式?

时间:2016-12-29 21:17:07

标签: python

我有两个清单。第一个在平面上具有表示路径的坐标,另一个在平面上具有表示每个图块的分数的坐标,其具有相关的分数。我想计算路径的分数,该分数是路径所在的每个区块的分数的总和。例如:

path = [ (3,4), (4,5) ]
plane = [ (3,4,50), (4,5,75), (6,7,100) ]

(路径的分数为50 + 75 = 125)

速度很重要。平面具有百元的数量级,路径具有数十个数量级。我正在考虑集合的交集,例如:

set(path).intersection( {p[:2] for p in plane} )

问题在于我没有跟踪分数。

我确定必须有一个简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:4)

只需从三元组创建一个字典(或直接以此格式创建三元组)。然后使用coord元组作为键访问数据(元组是可以清除的,所以利用它,字典存储确保正确的查找速度)

path = [ (3,4), (4,5) ]
plane = [ (3,4,50), (4,5,75), (6,7,100) ]

plane_dict = {(x,y):z for x,y,z in plane}

此时,plane_dict = {(4, 5): 75, (6, 7): 100, (3, 4): 50}

获得分数:

print(plane_dict.get(path[0],0))

并计算满分:

score = sum(plane_dict.get(p,0) for p in path)

(所以不匹配的坐标产生0)

答案 1 :(得分:1)

如果将计划存储为dict映射点以获得如下评分,那该怎么样?

plane = {(3, 4): 50, (4, 5): 75, (6, 7): 100}

然后给你打分,做一些像:

score = 0
for p in path:
   score += plane[p]