我试图生成一个给定字符串中所有重叠的n长度子字符串的列表。在
例如,对于6
和字符串"hereismystring"
的n,我将生成列表["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会有帮助吗?在
作为参考,这项技术在我的机器(一个新的MacBookPro)上需要大约100个单位,一个500长度的字符串和一个n为30的n。在
提前感谢您的帮助!在
从哪个Python编码技术最快的问题上退一步,我将以不同的方式来处理这个问题。既然所有的字符串都是相同的长度,而且都来自一个源字符串,为什么不直接处理字符范围,而不是将它们转换成正确的字符串呢?您可以避免大量的分配和复制,但是您必须调整代码,以知道每个“字符串”都有n个字符长。在
换句话说,当您想使用子字符串时,只需直接从源字符串读取范围。您将以最快的速度处理您想要的角色,因为它们可以从缓存中提取。可以将“substring”表示为源字符串的偏移量。在
有时,如果您想要超快的性能,就必须将熟悉的数据结构抛在脑后。只是一个想法。在
怎么样:
我相信deque是O(1),而list是O(n)
相关问题 更多 >
编程相关推荐