Перемешанный диапазон итератор - PullRequest
0 голосов
/ 13 июня 2018

В python3 range возвращает не список, а итератор.

Это замечательно и имеет некоторые преимущества, например, не генерирует весь список сразу, а генерирует элементы только при необходимости.

Теперь предположим, что я хочу диапазон в случайном порядке (в основном, перемешанный диапазон).В python2 я бы просто сделал:

my_list = range(n)
np.random.shuffle(my_list)

Это не будет работать в python3.Как только решение состоит в том, чтобы сгенерировать фактический список и затем перетасовать (который затем будет делать то же самое, что и python2)

my_list = list(range(n))
np.random.shuffle(my_list)

Но используя эту стратегию, мы теряем преимущество итератора.

Вопрос:Как я могу создать итератор случайного упорядоченного диапазона, который будет давать мне индексы только по запросу?

1 Ответ

0 голосов
/ 13 июня 2018

Как насчет модуля 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
...