我正在尝试生成给定字符串中所有重叠的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/

10-12 17:23
查看更多