2 votes

Itérateur de plage mélangée

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é ?

1voto

Rolf of Saxony Points 1695

Que diriez-vous du module shuffled?

pip3 install shuffled

>>> import shuffled
>>> my_list=shuffled.Shuffled(16)
>>> for i in my_list: print(i)
... 
2
14
15
1
4
5
3
0
7
10
11
6
8
9
12
13
>>> my_list=shuffled.Shuffled(16)
>>> for i in my_list: print(i)
... 
0
1
2
10
7
4
13
6
3
11
8
9
5
14
15
12

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