gpt4 book ai didi

python - 迭代大型列表(18,895 个元素)时 Double for 循环的更快方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:50 24 4
gpt4 key购买 nike

代码如下:

import csv
import re

with open('alcohol_rehab_ltp.csv', 'rb') as csv_f, \
open('cities2.txt', 'rb') as cities, \
open('drug_rehab_city_state.csv', 'wb') as out_csv:
writer = csv.writer(out_csv, delimiter = ",")
reader = csv.reader(csv_f)
city_lst = cities.readlines()

for row in reader:
for city in city_lst:
city = city.strip()
match = re.search((r'\b{0}\b').format(city), row[0])
if match:
writer.writerow(row)
break

“alcohol_rehab_ltp.csv”有 145 行,“cities2.txt”有 18,895 行(转换为列表时为 18,895)。这个过程需要一段时间才能运行,我没有计时,但大概 5 分钟左右。我在这里忽略了一些简单(或更复杂)的东西,可以使这个脚本运行得更快。我将使用其他 .csv 文件对“cities.txt”的大型文本文件运行,这些 csv 文件可能有多达 1000 行。任何关于如何加快速度的想法将不胜感激!这是 csv 文件:关键字 (144),平均。 CPC、本地搜索、广告商竞争

[alcohol rehab san diego],$49.54,90,High
[alcohol rehab dallas],$86.48,110,High
[alcohol rehab atlanta],$60.93,50,High
[free alcohol rehab centers],$11.88,110,High
[christian alcohol rehab centers],–,70,High
[alcohol rehab las vegas],$33.40,70,High
[alcohol rehab cost],$57.37,110,High

文本文件中的一些行:

san diego
dallas
atlanta
dallas
los angeles
denver

最佳答案

构建一个包含所有城市名称的正则表达式:

city_re = re.compile(r'\b('+ '|'.join(c.strip() for c in cities.readlines()) + r')\b')

然后做:

for row in reader:
match = city_re.search(row[0])
if match:
writer.writerow(row)

这会将循环迭代次数从 18895 x 145 减少到只有 18895,而正则表达式引擎会在这 145 个城市名称上尽力进行字符串前缀匹配。

为了您的方便和测试,这里是完整的 list :

import csv
import re

with open('alcohol_rehab_ltp.csv', 'rb') as csv_f, \
open('cities2.txt', 'rb') as cities, \
open('drug_rehab_city_state.csv', 'wb') as out_csv:
writer = csv.writer(out_csv, delimiter = ",")
reader = csv.reader(csv_f)

city_re = re.compile(r'\b('+ '|'.join(c.strip() for c in cities.readlines()) + r')\b')

for row in reader:
match = city_re.search(row[0])
if match:
writer.writerow(row)

关于python - 迭代大型列表(18,895 个元素)时 Double for 循环的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28737987/

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