lignes 8 et 9 : on pourrait générer la liste comme ceci : [i for i in range(c+1)]
Si tu veux vraiment faire une liste, list(range(c+1))
est encore plus simple. Mais ici, c'est même inutile, prendre directement le range
est encore plus simple et bouffe moins de mémoire (même si dans le cas présent avec un c
relativement petit c'est risible ). Au lieu d'avoir une bête liste, tu as un objet range
mathématiquement complètement définit (et en plus stocké en mémoire et manipulé) par trois nombres : les deux bornes et le pas. Si c
est de l'ordre de 10000, ça fait déjà un facteur 3000 en terme de mémoire par rapport à une liste.
La mémoire est même pas le seul ni le meilleur argument en faveur de range. Si tu as besoin de faire des manip' du genre number in range(a,b,c)
, un seul test est effectué et coutera la même chose quelque soient les valeurs des bornes. Si tu t'amuse à faire une liste et que $\dfrac{b-a}{c}$ est très grand, le moindre in
va prendre une plombe.
De manière générale, utiliser une liste en python devrait être relativement rare et réservé aux cas où on en a vraiment besoin. Dans la plupart des cas, ce qu'on veut, c'est juste un itérable, peu importe la structure de données derrière.