Nic*_*ick 5 python string performance cython
我正在尝试生成给定字符串中所有重叠n长度子串的列表.
例如,对于n 6和字符串,"hereismystring"我将生成列表["hereis", "ereism", "reismy", ..., "string"].我正在使用的琐碎代码现在看起来像这样:
n = 6
l = len(string)
substrings = [string[i:(i + n)] for i in xrange(l - n + 1)]
Run Code Online (Sandbox Code Playgroud)
很容易.问题是,我想加快速度(我有很多非常长的字符串).Python中有更快的技术吗?考虑到Python的字符串例程无论如何都会在C中下载到Cython帮助吗?
作为参考,这种技术在我的机器上需要大约100us(一个新的Macbook Pro),对于500长度的字符串和n为30.
我在这里先向您的帮助表示感谢!
从哪种 Python 编码技术最快的问题上退一步,我会以不同的方式处理这个问题。由于所有字符串的长度相同,并且都来自单个源字符串,为什么不直接直接处理字符范围,而不是将它们转换为正确的字符串呢?您将避免大量分配和复制,但您必须调整代码才能知道每个“字符串”的长度为 n 个字符。
换句话说,当您想要使用子字符串时,只需直接从源字符串读取范围即可。您将从缓存中提取所需的字符,并以最快的速度处理它们。您可以将“子字符串”仅表示为源字符串的偏移量。
有时,如果您想要超快的性能,则必须放弃熟悉的数据结构。只是一个想法。