Увеличивает ли цикл for ... in в Python сложность пространства? - PullRequest
0 голосов
/ 02 марта 2019

Скажем, у меня была следующая функция:

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 увеличивать сложность пространства этой функции, создавая новую строку для каждого char в s, илиэтот синтаксический сахар, который абстрагирует тот факт, что мы обращаемся к определенному индексу строки?

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Нет, цикл сам по себе не делает.Обратите внимание:

for char in some_string:
    print(char)

Требуется только один дополнительный объект постоянного размера.Это константа по отношению к размеру строки .Таким образом, не имеет значения, если моя строка имеет длину 10 или 1000 символов, всегда требуется один дополнительный str, чтобы зациклить ее.Следовательно, он занимает постоянное место.

0 голосов
/ 02 марта 2019

Во-первых, вы позаботились о том, чтобы цикл for фактически не увеличивал сложность пространства.Однако, если вы работали с большими массивами, временная сложность цикла for очень мала.Рекомендуется использовать векторизованную операцию вместо multi для циклов.Например, numpy.dot(), что очень распространено в машинном обучении или глубоком обучении.

0 голосов
/ 02 марта 2019

Вот версия со списком:

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, которая не требует дополнительного пространства.

...