作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有两个字典列表。第一个列表包含根据 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/
我是一名优秀的程序员,十分优秀!