制作列表综合到功能时出现意外减速难题

2024-09-28 05:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个代码,该代码应该对一个文件的语句和两个列表的元素进行一些操作keywordskeywords2。详情如下—

import os
keywords=['a','b']
keywords2=['c','d mvb']

def foo(sentence,k2):

    gs_list=[]                       #####
    for k in keywords:               #####    
        if k in sentence:            #####
            gs_list.append(k)        #####

    for k in gs_list:
        if (k in sentence) and (k2 in sentence):
            print 'a match'
    return 4

for path, dirs, files in os.walk(r'F:\M.Tech\for assigning cl\selected\random 100'):
    for file in files:
        sentences=open(file).readlines();
        for sentence in sentences:
            if sentence.startswith('!series_title'):      
                for k2 in keywords2:
                    foo(sentence,k2)

我已经标记了有问题的代码部分。这篇文章(我们称之为BETA)基本上形成了一个关键字列表,这些关键字在所选句子中。因此,将来的操作只能使用这些关键字来执行

这段代码大约需要47 seconds才能运行100个文件。现在我在想办法加快速度。在keywords2中约有50个元素。所以我想我基本上运行了50次BETA,把它放在函数func中,而我只需要列表keywordssentence。我的主代码中已经有了这两个部分,所以我把这部分转移到了主代码中-

import os
keywords=['a','b']
keywords2=['c','d mvb']

def foo(sentence,k2):

    for k in gs_list:
        if (k in sentence) and (k2 in sentence):
            print 'a match'
    return 4

for path, dirs, files in os.walk(r'F:\M.Tech\for assigning cl\selected\random 100'):
    for file in files:
        sentences=open(file).readlines();
        for sentence in sentences:
            if sentence.startswith('!series_title'):   

                gs_list=[]                       #####
                for k in keywords:               #####    
                    if k in sentence:            #####
                        gs_list.append(k)        #####                        

                for k2 in keywords2:
                    foo(sentence,k2)

我的想法是,这将确保这个列表形成过程只发生一次,每句话,而不是50次像以前一样。这肯定会提高代码的速度。但是这段代码实际上花了89 seconds来处理同样的100个文件

我不明白为什么这要比前面的代码花费更多的时间。有什么想法吗


Tags: 代码ings列表foriffooos

热门问题