在Python3中有效地切片字符串

问题描述 投票:1回答:1

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

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

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

python string slice
1个回答
3
投票

解决这个问题的唯一方法是使你的算法使用类似bytes的类型,Py2 str或Py3 bytes;不支持Py2 unicode / Py3 str的观点。我提供了有关如何在my answer上执行a related question的详细信息,但是短版本是,如果你可以假设bytes类似的参数(或转换为它们),将参数包装在memoryview中并且切片是一个合理的解决方案。一旦转换为memoryview,切片产生新的memoryviews与O(1)成本(在时间和记忆中),而不是文本切片的O(n)时间/内存成本。

© www.soinside.com 2019 - 2024. All rights reserved.