在python3中range
不返回列表而是返回迭代器。
这很好,并且有一些优点,例如不会立即生成整个列表,而只是在需要时生成元素。
现在假设我想要一个随机顺序的范围(基本上是一个洗牌范围)。在python2中,我只是这样做:
my_list = range(n)
np.random.shuffle(my_list)
这在python3中不起作用。一旦解决方案是生成实际列表然后随机播放(这将与python2相同)
my_list = list(range(n))
np.random.shuffle(my_list)
但是使用这种策略我们失去了迭代器的优势。
问题:如何创建随机有序范围迭代器,只在请求时为我提供索引?
答案 0 :(得分:1)
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