我正在尝试搜索地址包含对某个国家/地区或城市的引用。这将是地址包含完整的国家/地区名称,ISO 2国家/地区代码,ISO 3国家/地区代码或对城市的引用。
因此,首先我生成国家代码/名称/城市的组合(下面的变量“组合”)与各种标点符号的组合,因为地址是自由文本字段,名称不是很干净。
然后对于每个地址,我遍历组合并检查组合是否在地址中,否则如果没有找到组合则返回false。但是,数千个地址和国家/地区组合的速度非常慢。
正在搜索的数据集是https://en.wikipedia.org/wiki/ISO_3166-1的所有表格以及一长串城市。
搜索的数据包括数百个字符串,如:“Steve; Studio 103,商务中心; 61 Wellfield Road; Cardiff; GB”
有没有办法让这个更有效率?
def country_code_patterns(country_codes):
punct1 = [' ',',','/','','']
punct2 = [' ',',','/','\\','']
combinations = itertools.zip_longest(punct1, itertools.cycle(country_codes), punct2)
return combinations
combinations = country_code_patterns(country_codes)
for address in addresses:
for combination in combinations:
if combination in address:
return True
else:
return False
答案 0 :(得分:1)
编辑:在更好地理解问题之后,当您搜索城市名称和国家/地区代码对时,您可以创建一个字典来保存国家/地区代码键下的城市名称。
如果您随后搜索国家/地区代码,然后仅搜索字典中属于该键的城市,则会大大减少搜索中的项目数。这应该更快。
-
我会使用itertools库,如果我已经正确理解了你的代码试图做什么我将使用izip连接你用来提高速度的三个列表中的每个项目。
https://docs.python.org/2/library/itertools.html
同样使用列表推导会加快你的python代码