gpt4 book ai didi

python - 有没有办法有效地比较 python 中的两个字典列表?

转载 作者:太空狗 更新时间:2023-10-30 02:06:25 25 4
gpt4 key购买 nike

我有两个字典列表。第一个列表包含根据 x、y、z、半径 定义的球体。第二个列表包含空间中的各种点,如 x、y、z。这些列表都非常长,因此遍历每个列表并与所有值进行比较是低效的。

我一直在尝试 map 和 reduce 项,但它们在过滤函数中都只占用 1 个项。我正在使用的是以下内容:

      for curNode in nodeList:
for i in sphereList:
tmpRad = findRadius(i, curNode)
if float(tmpRad) <= float(i['radius']):
print "Remove node", curNode['num']
nodeRemovalList.append(curNode['num'])
break

其中 i 是当前球体 (x, y, z, rad)curNode 是节点 (num, x, y, z)。对于大型列表,这变得非常低效。我想过滤掉落在任何球体半径内的节点。

最佳答案

试试这个:

def in_sphere(node):
return any(float(findRadius(sphere, node)) <= float(sphere['radius'])
for sphere in sphereList)

nodeRemovalList = filter(in_sphere, nodeList)

这将比您显示的代码运行快。

这是假设您确实需要 nodeRemovalList 并且它不仅仅是一个中间步骤。如果它只是一个中间步骤,则返回 not any( 并且 `filter 的结果将是您想要的集合。

另外,为什么 sphere['radius'] 不是一个 float ?这会在一个非常大的列表上加快速度。

关于python - 有没有办法有效地比较 python 中的两个字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3715039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com