如何在Python中生成数组的排列?

31 投票
6 回答
47045 浏览
提问于 2025-04-15 18:23

我有一个包含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!大得多,所以应该很适合你的需求。

撰写回答