如何在Python中生成数组的排列?
我有一个包含27个元素的数组,但我不想生成这个数组的所有排列组合(27!)。我只需要随机选择5000个排列组合,任何建议都会很有帮助...
6 个回答
6
itertools.permutations
是一个工具,它可以生成所有可能的排列组合。它是一个生成器,这意味着它不会一次性把所有的排列组合都放在一个列表里,而是按需生成。你可以随意跳过一些组合,直到你得到5000个你想要的结果。
12
import random
perm_list = []
for i in range(5000):
temp = range(27)
random.shuffle(temp)
perm_list.append(temp)
print(perm_list)
10888869450418352160768000000
我喜欢大数字!:)
还有
10888869450418352160768000001
是个质数!!
补充:
#with duplicates check as suggested in the comment
perm_list = set()
while len(perm_list)<5000:
temp = range(27)
random.shuffle(temp)
perm_list.add(tuple(temp)) # `tuple` because `list`s are not hashable. right Beni?
print perm_list
警告:如果随机数生成器不好,这个过程永远不会停止!
43
要生成一个排列,可以使用random.shuffle
这个方法,并把结果保存下来。然后在一个循环里重复这个操作,每次都检查一下有没有重复的结果(不过一般来说不会有重复)。当你的结果集里有5000个项目时,就可以停止了。
关于评论中的观点,Python的random模块是基于梅森旋转算法,它的周期是2**19937-1
,这个数字比27!
大得多,所以应该很适合你的需求。