我正在尝试生成给定字符串中所有重叠的 n 长度子字符串的列表。
例如,对于 n 的 6
和字符串 "hereismystring"
我会生成列表 ["hereis", "ereism", "reismy ", ..., "字符串"]
。我现在使用的简单代码如下所示:
n = 6
l = len(string)
substrings = [string[i:(i + n)] for i in xrange(l - n + 1)]
很简单。问题是,我想加快速度(我有很多很长的字符串)。 Python 中有更快的技术吗?考虑到 Python 的字符串例程无论如何都在 C 中,那么转向 Cython 会有帮助吗?
作为引用,对于长度为 500 的字符串和 n 为 30,此技术在我的机器(一台新的 Macbook Pro)上大约需要 100us。
提前感谢您的帮助!
最佳答案
从哪种 Python 编码技术最快的问题上退一步,我会以不同的方式处理这个问题。由于所有字符串的长度都相同,并且都来自同一个源字符串,为什么不直接使用字符范围,而不是将它们转换为适当的字符串呢?您将避免大量分配和复制,但您必须调整代码以了解每个“字符串”的长度为 n 个字符。
换句话说,当您想要使用子字符串时,只需直接从源字符串中读取范围即可。您将尽可能快地使用您想要的字符,因为它们可以从缓存中提取出来。您可以将“子字符串”表示为源字符串中的一个偏移量。
有时,如果您想要超快的性能,就必须抛开熟悉的数据结构。只是一个想法。
关于python - 从 Python 中的字符串创建重叠子字符串列表的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14556044/