我需要改进python函数,它如何处理循环和字符串?

2024-04-25 03:46:42 发布

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

我有这样的问题,我有一段关于python2.7的代码。对于对象中的项目略多于70000个的对象,它的工作时间约为60秒。它是如何工作的?它获取一个具有指向另一个对象的路径的对象,并将它们转换为ASCII字符串。我想问题是为什么它这么慢。你知道吗

def createPath(self, path, NameOfFile ):
        temp = []
        for j in range( path.shape[0] ): 
            rr = path[j][0]
            obj = NameOfFile[rr]
            string = ''.join(chr(i) for i in obj[:])
            string = string.replace("aaaa","bbbb")      
            temp.append(string)
        return ( np.array(temp) )

这不是我自己的代码,我在网上找到的,所以我的问题是什么?如何使这段代码更快?我在python方面没有丰富的经验,但也许有一些有用的库或技巧可以帮助我。我感谢所有的帮助,任何想法都可能有用。你知道吗


Tags: path项目对象代码in路径objfor
2条回答

使用@DanD使用的相同想法,但试图避免for循环:

def createPath(self, path, NameOfFile):
    NameOfFile_ = [''.join(chr(i) for i in obj).replace("aaaa", "bbbb") for obj in NameOfFile]
    return np.array(NameOfFile_[obj[0]] for obj in path))

解释器开销应该会减少,虽然我没有办法检查性能,但实际上,我甚至不确定for obj in path在这种情况下是否有效。你知道吗

应用环吊可以提高性能。假设NameOfFile是一个列表(如果它是dict,则情况类似),并且NameOfFile中的所有条目都将被访问,NameOfFile的长度大部分时间小于path.shape[0],因此我们可以对它们计算一次转换:

def createPath(self, path, NameOfFile ):

    NameOfFile_ = []
    for obj in NameOfFile:
        name = ''.join(chr(i) for i in obj)
        name = name.replace("aaaa","bbbb")
        NameOfFile_.append(name)

    temp = []
    for j in range(path.shape[0]): 
        rr = path[j][0]
        temp.append(NameOfFile_[rr])

    return np.array(temp)

相关问题 更多 >