我正在尝试生成给定字符串中所有重叠的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)]
很简单。问题是,我想加快速度(我有很多很长的琴弦)。 Python中有更快的技术吗?既然Python的字符串例程是用C语言编写的,那么使用Cython会有所帮助吗?
作为引用,此技术在我的机器(一台新的Macbook Pro)上大约需要100us,长度为500的字符串,n为30。
我在这里先向您的帮助表示感谢!
最佳答案
从哪种Python编码技术最快的问题上退后一步,我会以不同的方式来解决这个问题。由于所有字符串的长度相同,并且都来自单个源字符串,为什么不直接使用字符范围而不是将它们转换为正确的字符串呢?您将避免大量分配和复制,但是您必须调整代码以知道每个“字符串”的长度为n个字符。
换句话说,当您要使用子字符串时,只需直接从源字符串中读取范围。您将尽可能快地使用所需字符,将其从缓存中拉出。您可以将“子字符串”表示为只是源字符串的偏移量。
有时,如果您想要超快的性能,则必须抛弃熟悉的数据结构。只是一个想法。
关于python - 在Python中从字符串创建重叠子字符串列表的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14556044/