在Python3中有效地切片字符串

时间:2018-03-06 02:14:28

标签: python string slice

由于python执行slice-by-copy,切换字符串可能会非常昂贵。

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

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

1 个答案:

答案 0 :(得分:3)

解决此问题的唯一方法是让您的算法使用bytes类似的类型,Py2 str或Py3 bytes;不支持Py2 unicode / Py3 str的视图。我提供了有关如何在my answera related question上执行此操作的详细信息,但简短版本是,如果您可以假设bytes - 类似参数(或转换为它们),请将参数包装在memoryview和切片是一种合理的解决方案。转换为memoryview后,切片会产生memoryview成本(在时间和内存中)的新O(1),而不是文本切片的O(n)时间/内存成本。