En python3 range
ne renvoie pas une liste mais un itérateur.
C'est génial et présente certains avantages comme ne pas générer toute la liste en une seule fois mais seulement générer les éléments au moment où ils sont nécessaires.
Maintenant supposons que je veuille une plage dans un ordre aléatoire (essentiellement une plage mélangée). En python2 je ferais simplement :
my_list = range(n)
np.random.shuffle(my_list)
Cela ne fonctionnera pas en python3. Une solution consiste à générer la liste réelle et ensuite à la mélanger (ce qui fera alors la même chose que python2)
my_list = list(range(n))
np.random.shuffle(my_list)
Mais en utilisant cette stratégie, nous perdons l'avantage de l'itérateur.
Question : Comment puis-je créer un itérateur de plage ordonné aléatoirement qui ne me donnera que des index quand cela est demandé ?