我的for循环嵌套在计算项频时花费了很多时间

问题描述 投票:0回答:1

我有一个列表“ total_vocabulary”,其中包含56个文档集合中的所有唯一单词。还有每个文档“ rest_doc”的单词列表。我想从“ rest_doc”中的“ total_vocabulary”中计算每个单词的词频,因此“ term_freq”列表将是total_vocabulary大小相同的列表的列表,而term_freq的每个索引将是表示出现的大小的列表56每个文档中的每个单词。问题是嵌套的for循环要花很多时间,几乎要花一分钟时间才能运行。有什么办法可以更快地做到这一点?代码:

for i in range(len(total_vocabulary)):
    doc = []
    for j in range(len(rest_doc)):
        counter = 0
        for k in range(len(rest_doc[j])):
            if total_vocabulary[i] == rest_doc[j][k]:
                counter = counter + 1
        doc.append(counter)
    term_freq.append(doc)  

这是我的代码。

python list for-loop tf-idf
1个回答
0
投票

您要遍历每个文档中的单词多次-total_vocabulary中的每个单词一次。

如果仅对once遍历每个文档中的单词,将会更快,您可以通过重新排列循环并将total_vocabulary设置为set而不是 list,因为设置查找要快得多。

vocab_set = set(total_vocabulary)
for document in documents:
    for word in document:
        if word in vocab_set:
            counter = counter + 1
© www.soinside.com 2019 - 2024. All rights reserved.