在python3中,range不返回列表,而是迭代器。

这很棒,并且具有一些优点,例如不会立即生成整个列表,而是仅在需要时才生成元素。

现在假设我想要一个随机顺序的范围(基本上是一个随机的范围)。在python2中,我只是做:

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


这在python3中不起作用。一旦解决方案是生成实际列表,然后改组(然后将与python2相同)

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


但是使用这种策略会失去迭代器的优势。

问题:如何创建随机有序范围迭代器,该迭代器仅在被请求时才提供索引?

最佳答案

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

关于python - 洗牌范围迭代器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50833256/

10-12 14:05