我试图从索引列表中生成置换,目前,我使用itertools.permutation
。没关系,只是我需要一个真正随机的索引,因为我不能选择所有的排列,而是选择整个集合(初始的)的一个很短的子集进行模拟
对于itertools.permutation
:
置换元组根据输入可数的顺序按字典顺序发出。因此,如果对输入iterable进行排序,则组合元组将按排序顺序生成
import itertools
for ind, idxs in enumerate(itertools.permutations(range(5))):
print(ind)
print(idxs)
print('--------')
0
(0, 1, 2, 3, 4)
--------
1
(0, 1, 2, 4, 3)
--------
2
(0, 1, 3, 2, 4)
--------
3
(0, 1, 3, 4, 2)
--------
4
(0, 1, 4, 2, 3)
--------
5
(0, 1, 4, 3, 2)
--------
6
(0, 2, 1, 3, 4)
--------
7
(0, 2, 1, 4, 3)
--------
8
(0, 2, 3, 1, 4)
--------
9
(0, 2, 3, 4, 1)
--------
10
(0, 2, 4, 1, 3)
--------
11
(0, 2, 4, 3, 1)
--------
12
(0, 3, 1, 2, 4)
--------
13
(0, 3, 1, 4, 2)
--------
我想到的一个解决方案肯定是每次洗牌列表以获得一个随机顺序,但这使得排列的想法过时,这是不可取的,因为有可能会多次生成相同的样本。排列应该以迭代的方式生成,所以我不能只做list(itertools.permutation..)
,因为这将产生一个真正不必要的长列表
使用
random.sample
:一种方法是在生成排列之前和/或之后洗牌
供参考:
生成随机排列:如果您只使用其中的一小部分k,那么您获得两倍相同的概率是k/n
相关问题 更多 >
编程相关推荐