我需要改进与循环和字符串一起使用的 python 函数 它是如何工作的?

I need to improve python function that works with loops and string how it does?

我有这样的问题我在 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 方面没有丰富的经验,但也许有一些有用的库或技巧可能会有所帮助。感谢所有帮助,任何想法都可能有所帮助。

应用循环提升可能会提高性能。假设 NameOfFile 是一个列表(如果它是一个字典,情况类似)并且 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)

使用与@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 在这种情况下是否有效。