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

新手上路,请多包涵

我有一个包含 27 个元素的数组,我不想生成数组的所有排列(27!)我需要 5000 个随机选择的排列,任何提示都会有用…

原文由 user257522 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 303
2 个回答

要生成一个排列,请使用 random.shuffle 并存储结果的副本。在一个循环中重复此操作,每次检查重复项(虽然可能没有)。一旦结果集中有 5000 个项目,就停止。

为了解决评论中的问题,Python 的 随机模块 基于 Mersenne Twister ,周期为 2**19937-1 ,比 27! 大得多,因此它应该适合您的使用.

原文由 Mark Byers 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

警告:如果 RNG 不好,这将永远不会停止!

原文由 Pratik Deoghare 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏