python - 改进 Python 中的多个 findall 执行
问题描述
findall
我正在尝试改进我的 Python 代码中相同的多次执行(以下 for..loop 的 20 倍)的使用:
import xml.etree.ElementTree as etree
obj = etree.parse(...)
for goal in obj.findall('handle/goal'):
for rule in goals.findall('rule'):
...
我已经做了一些改变。我现在在列表中执行相同的结果,并且可以重复使用该列表:
rule_list = []
for goal in obj.findall('handle/goal'):
for rule in goal.findall('rule'):
rule_list.append(rule)
现在我在所有 for..loops (~20 for..loops) 中使用这个 rule_list,比如:
for rule in rule_list:
...
现在,虽然我做了这些更改,但我并没有看到经过时间的大幅增长,只有 <5%。
所以,我想知道我还能做什么?我可以在 python 中使用哪些其他设计技术来加快速度?
- 解决方案 += :
d0 = time.time()
for goal in obj.findall('handle/goal'):
rule_list += goal.findall('rule')
dt = time.time() - d0
print('time +=(findall): %0.4f' % dt)
time +=(findall): 0.0019s
- 解决方案迭代/附加:
d0 = time.time()
for goal in obj.iter('handle/goal'):
rule_list.append(goal.findall('rule'))
dt = time.time() - d0
print('time append(iter/findall): %0.4f' % dt)
time append(iter/findall): 0.0089s
- 解决方案附加(两个 for..loops):
d0 = time.time()
for goal in obj.findall('handle/goal'):
for rule in goal.findall('rule'):
rule_list.append(rule)
dt = time.time() - d0
print('time append(findall): %0.4f' % dt)
time append(findall): 0.0034s
因此,似乎第一个解决方案是迄今为止最快的解决方案。
解决方案
推荐阅读
- java - Redis部署到2个或更多容器时如何使用Redission清除Redis缓存?
- reactjs - 无法在 Visual Studio C# ASP 内的 React 应用程序上使用 Material-UI。NET 核心网络应用程序
- sql - SQL AWS Athena Group by 没有列
- swiftui - 我们如何强制 ForEach 使用 UUID 而不是 (id: \.self)?
- node.js - 测试具有依赖于另一个模式的验证的猫鼬模式
- amazon-web-services - 从 cloudformation 为 ALB 启用访问日志记录
- python - 一种将转换器应用于 pandas.read_sql 的方法?
- python - 尝试提取特定 API 响应数据时出现 KeyError
- php - 出于某种原因,当我将其添加到我的代码中时,我得到了意外的文件结束错误。但我无法弄清楚这段代码有什么问题
- javascript - 如何使用 Firebase Auth 作为 OIDC 向 Amplify GraphQL 发出经过身份验证的请求?