随机范围迭代器

时间:2018-06-13 09:05:50

标签: python python-3.x numpy range

在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 :(得分: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