是否有一种方法可以在O(1)时间复杂度中删除Python中字符串的最后一个字符?



是否有一种简单的方法可以在O(1)时间复杂度中删除Python中字符串的最后一个字符?使用string = string[:-1]会是O(1)吗?

不能,因为字符串是不可变的。唯一可以做的事情是创建一个str值的修改副本,这意味着复制所有您想要删除的字符。任何这样的操作本质上都是O(n)操作。

string[:-1]不删除最后一个字符;它复制除最后一个字符以外的所有

给你点时间:

# Stright-forward
example_string = 'some medium string for examining the timing of 
different 
truncate methodes'
example_string = example_string[:-1]
# Stright-forward explicit
example_string = 'some medium string for examining the timing of 
different 
truncate methodes'
example_string = example_string[0:len(example_string)-1]
# Deleting last char
example_string = 'some medium string for examining the timing of 
different truncate methodes'
example_string = bytearray(example_string, encoding='utf-8')
del example_string[len(example_string)-1]
example_string = example_string.decode(encoding='utf-8')
# Creative way using replace (only valid if this word is unique in your string)
example_string = 'some medium string for examining the timing of different 
truncate methodes'
example_string = example_string.replace('methodes', "methode")

使用timeit执行上述所有内容:

>>> print(f'{timeit.timeit(stmt=test_code)}tStright-forward')
0.03856031800387427 Stright-forward
>>> print(f'{timeit.timeit(stmt=test_code)}tStright-forward explicit')
0.07093821599846706 Stright-forward explicit
>>> print(f'{timeit.timeit(stmt=test_code)}tDeleting last char')
0.34045136597706005 Deleting last char
>>> print(f'{timeit.timeit(stmt=test_code)}tCreative way using replace (only valid if this word is unique in your string)')
0.07177364896051586 Creative way using replace (only valid if this word is unique in your string)

最新更新