假设我的big_string
的长度为n
,我想从其结尾删除长度为k
的子字符串
我们可以像big_string[:-k]
一样来做,但这将是O(n-k)
,我们可以做得更好吗,像O(k)
中那样?
答案 0 :(得分:0)
如果您的字符串是py2 unicode
或py3 str
,则@MyNameIsCaleb指向的memoryview
想法将不起作用,并且分片确实会创建副本,即O(n )。
可变类型(del m[-k:]
)的末尾修剪很快,但是只有字符串类型(不可变的)支持find()
,in
和正则表达式之类的字符串操作。
如果修剪尾部是非常常见的操作,并且很少使用字符串操作或可以将其绑定到字符串的一小部分,那么将字符串一次转换为字符列表可能会很麻烦:>
chars = [c for c in big_string]
要对有界部分使用字符串操作,可以将切片转换为字符串。例如,要确定在最近的1000个字符中是否出现“ foo”:
'foo' in ''.join(chars[-1000:])