3 votes

Une boucle "for ... in" en Python augmente-t-elle la complexité de l'espace ?

Supposons que je dispose de la fonction suivante :

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

Le for ... in ajoute à la complexité de l'espace de cette fonction en créant une nouvelle chaîne pour chaque char en s ou s'agit-il d'un sucre syntaxique qui fait abstraction du fait que nous accédons à un index spécifique d'une chaîne de caractères ?

3voto

juanpa.arrivillaga Points 35811

Non, la boucle en elle-même ne le fait pas. Considérez :

for char in some_string:
    print(char)

Il ne nécessite qu'un objet supplémentaire de taille constante. Cet objet est constante par rapport à la taille de la chaîne . Ainsi, peu importe que ma chaîne de caractères soit longue de 10 ou de 1000 caractères, elle nécessite toujours un caractère supplémentaire. str pour passer en boucle au-dessus de lui. Il occupe donc un espace constant.

0voto

Kunal Mukherjee Points 1170

Voici une version avec compréhension de la liste :

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")

Comme vous pouvez le constater, les chaînes Python sont immuables, ce qui signifie qu'elles ne peuvent pas être modifiées après leur création. Nous indexons donc simplement la chaîne avec la construction for..in, ce qui ne prend pas d'espace supplémentaire.

0voto

AyiF Points 87

Tout d'abord, la réponse qui vous intéresse est que la boucle for n'ajoute pas à la complexité de l'espace. Cependant, si vous travaillez avec de grands tableaux, la complexité temporelle de la boucle for est très faible. Il est recommandé d'utiliser une opération vectorisée au lieu de plusieurs boucles for. Par exemple, il est recommandé d'utiliser une opération vectorisée au lieu de plusieurs boucles for, numpy.dot() ce qui est très courant dans le domaine de l'apprentissage automatique ou de l'apprentissage profond.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X