【发布时间】:2013-01-11 10:30:32
【问题描述】:
我正在尝试生成给定字符串中所有重叠的 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 帮助?
作为参考,对于 500 长度的字符串和 30 的 n,此技术在我的机器(新的 Macbook Pro)上大约需要 100us。
提前感谢您的帮助!
【问题讨论】:
-
Cython 肯定会为您提供更快的速度,但您真的需要这种优化吗?
-
FWIW,在我的旧 macbook 上,使用 pypy 而不是 CPython 将时间从 ~150 us 减少到 ~32 us,至少在它预热之后。如果您只需要几个因素,可能值得一试。
-
一旦生成这些子字符串,您打算做什么?这可以为决定提供依据。
标签: python string performance cython