关于Python“in”的时间复杂性的简单查询

关于Python“in”的时间复杂性的简单查询,python,complexity-theory,Python,Complexity Theory,我有一个函数strip\u标点文本,它接收一个文本字符串,并使用标点列表删除其中的所有标点。我不确定时间复杂度是在*N还是在^2上。我认为它适用于N文本长度,然后是标点符号长度。可能有人 澄清此代码的时间复杂性 def strip_punctuation(text): punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~''' stripped = "" for i in text: if i n

我有一个函数strip\u标点文本,它接收一个文本字符串,并使用标点列表删除其中的所有标点。我不确定时间复杂度是在*N还是在^2上。我认为它适用于N文本长度,然后是标点符号长度。可能有人 澄清此代码的时间复杂性

def strip_punctuation(text):
    punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~'''
    stripped = ""
    for i in text:
        if i not in punctuations:
            stripped = stripped + i

    return stripped
如果N为lentext,则此选项处于启用状态:

for i in text
如果M是标点符号,则此代码为OM^2:

if i not in punctuations:
    stripped = stripped + i
这是因为长度>=M的整个剥离必须复制M次剥离+i,以复制剥离

因此,如果文本和标点都是输入,那么复杂性将为*OM^2,但在本例中,M是常数,因此复杂性为


请注意,如果标点非常大,则函数的速度将非常慢,但其复杂性仍将保持不变,这只意味着当输入大于n倍时,它是n倍慢。

我注意到在迭代剥离=剥离+i中的字符串连接是不推荐的,在某些样式指南中考虑^ ^ 2。^ ^ 2可能是正确的。看看标准库中的maketrans和translate函数,确切的细节取决于您使用的Python版本,如果只是因为循环字符是用C而不是Python编写的,它们几乎可以更快地完成这项工作。