做一个“为了。。。在“Python循环中增加空间复杂性?”?

2024-10-03 19:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下功能:

def findNumVowels(s):
    vowels = ['a', 'e', 'i', 'o', 'u']
    numVowels = 0
    for char in s:
        if char in vowels:
            numVowels += 1
    return numVowels

print(findNumVowels("hello world")) # 3

for ... in循环是通过为s中的每个char创建一个新的字符串来增加这个函数的空间复杂性,还是这个语法糖抽象了我们正在访问字符串的特定索引这一事实?在


Tags: 函数字符串in功能helloforworldreturn
3条回答

以下是列表理解的版本:

def findNumVowels(s):
    vowels = ['a', 'e', 'i', 'o', 'u']
    return len([char_literal for char_literal in s if char_literal in vowels])

findNumVowels("Kunal")

如您所见,Python字符串是不可变的,这意味着它们在创建之后不能被更改。所以我们只是用for..in构造来索引字符串,这不需要额外的空间复杂性。在

首先,您关心的答案是for循环实际上不会增加空间复杂性。但是,如果使用大型数组,for循环的时间复杂性非常差。建议使用矢量化操作,而不是multi for循环。例如,numpy.dot(),这在机器学习或深度学习中非常常见。在

不,循环本身没有。考虑:

for char in some_string:
    print(char)

它只需要一个大小恒定的额外对象。这是相对于字符串大小的常数。所以,不管我的字符串是10个还是1000个字符,它总是需要一个额外的str来循环它。因此,它需要恒定的空间。在

相关问题 更多 >