python - 从 Python 中的字符串创建重叠子字符串列表的最快方法

标签 python string performance cython

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

相关文章:

c# - 在不使用 GDI+/WPF 的情况下,C# 中的快速+高质量图像大小调整算法

performance - 导入与链接到 Excel 电子表格

python - Django FileField 存储选项

c++ - 在 C++ 中将 HWND 转换为十六进制字符串

java - 从数组中另选打印

字符串排列秩+数据结构

c# - 使用泛型的 C# 方法多态性的性能

Python:wx.ListCtrl -> 如何使其中一项成为图片,单击一次即可打开文件

python - 为什么使用 from __future__ import print_function 会破坏 Python2 样式的打印?

python - 如何在 Google Colab 上安装 auto-sklearn?