在 Python3 中有效地对字符串进行切片

lie*_*los 2 python string slice

由于 python 会逐个复制,因此切片字符串的成本可能非常高。

我有一个对字符串进行操作的递归算法。具体来说,如果一个函数被传递了一个 string a,该函数会在a[1:]传递的 string上调用自己。问题在于字符串太长,逐个复制机制正在成为删除第一个字符的非常昂贵的方法。

有没有办法解决这个问题,还是我需要完全重写算法?

Sha*_*ger 5

一般来说,解决这个问题的唯一方法是让你的算法使用bytes类似类型, Py2str或 Py3 bytes;不支持Py2 unicode/ Py3 的视图str。我在相关问题的回答中提供了有关如何执行此操作的详细信息,但简短的版本是,如果您可以假设bytes类似参数(或转换为它们),则将参数包装在 a 中memoryview并进行切片是一个合理的解决方案。一旦转换为 a memoryview,切片会产生新的memoryviewsO(1)成本(在时间和内存方面),而不是O(n)文本切片的时间/内存成本。