我编写了下面的python代码片段,它实际查找字符串中是否存在特定的子字符串。由于循环运行了大约1000次,因此大约需要5-7秒才能完成。你知道吗
for style in all_available_gs_styles:
if style.sld_title is not None:
if str(style.sld_title) not in ('line', 'point', 'polygon', 'Polygon', 'Default Line', 'Default Point'):
if 'PolygonSymbolizer' in style.sld_body and layer_geom == 'polygon':
gs_styles.append((style.name, style.sld_title))
elif 'LineSymbolizer' in style.sld_body and layer_geom == 'line':
gs_styles.append((style.name, style.sld_title))
elif 'PointSymbolizer' in style.sld_body and layer_geom == 'point':
gs_styles.append((style.name, style.sld_title))
我想知道是否有一种更有效的方法来搜索文本中的字符串,它大约有50行长。什么是更快的方法?你知道吗
编辑 在接受答案后,执行时间缩短到4-5秒。仍然不够,但比以前好多了。你知道吗
将主体解析为
set
,这样可以更有效地搜索它。你知道吗我会用一些更简洁但仍然相当可读的东西,比如:
请注意,这些收益只是有条件的:
例如,首先检查相等性检查,因为它更快是正确的方法,但是它只在返回
False
的情况下才有帮助。你知道吗你(和我)代码中的瓶颈是这些
in
检查(if 'PolygonSymbolizer' in style.sld_body
),但是如果不知道你正在使用的数据,我就无能为力了。你知道吗编辑
使用Euler's formula for polyhedra我们可以假设,对于每个多边形,线的数量(E)将大于顶点的数量(V),因此,
style.sld_body
中最常见的实体。我们可以利用这一点,通过像geoms = ('line', 'point', 'polygon')
那样重新排列geom
元组,使any
短路更频繁。这当然不会产生重大影响,但这是我们所能做的最好的。你知道吗相关问题 更多 >
编程相关推荐