我正在使用python 3.5,我正在编写一个处理大型电子表格文件的脚本。电子表格的每一行都包含一个短语和其他几个相关值。我正在将文件解析为矩阵,但对于示例文件,它有超过3000行(甚至更大的文件应在预期范围内)。我还有一个100字的清单。我需要搜索每个单词,矩阵的哪一行在其字符串中包含它,并根据它打印一些平均值。
目前我正在遍历矩阵的每一行,然后检查字符串是否包含任何提到的单词,但此过程需要3000次迭代,每次检查100次。有没有更好的方法来完成这项任务?
答案 0 :(得分:1)
从长远来看,我鼓励你使用更适合这项任务的东西。例如,SQL数据库。
但是如果你坚持编写自己的python解决方案,可以采取以下措施来优化它:
使用集。集合具有非常有效的成员资格检查。
wordset_100 = set(worldlist_100)
for row in data_3k:
word_matches = wordset_100.intersect(row.phrase.split(" "))
for match in word_matches:
# add to accumulator
# this loop will be run less than len(row.phrase.split(' ')) times
pass
<强>并行化。强>
from multiprocessing import Pool
from collections import defaultdict
def matches(wordset_100, row):
return wordset_100.intersect(row.phrase.split(" ")), row
if __name__ == "__main__":
accu = defaultdict(int)
p = Pool()
wordset_100 = set(worldlist_100)
for m, r in p.map(matches, data_3k):
for word in m:
accu[word] += r.number