В python3 range
возвращает не список, а итератор.
Это замечательно и имеет некоторые преимущества, например, не генерирует весь список сразу, а генерирует элементы только при необходимости.
Теперь предположим, что я хочу диапазон в случайном порядке (в основном, перемешанный диапазон).В python2 я бы просто сделал:
my_list = range(n)
np.random.shuffle(my_list)
Это не будет работать в python3.Как только решение состоит в том, чтобы сгенерировать фактический список и затем перетасовать (который затем будет делать то же самое, что и python2)
my_list = list(range(n))
np.random.shuffle(my_list)
Но используя эту стратегию, мы теряем преимущество итератора.
Вопрос:Как я могу создать итератор случайного упорядоченного диапазона, который будет давать мне индексы только по запросу?