我有一个包含 27 个元素的数组,我不想生成数组的所有排列(27!)我需要 5000 个随机选择的排列,任何提示都会有用…
原文由 user257522 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个包含 27 个元素的数组,我不想生成数组的所有排列(27!)我需要 5000 个随机选择的排列,任何提示都会有用…
原文由 user257522 发布,翻译遵循 CC BY-SA 4.0 许可协议
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 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答893 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
要生成一个排列,请使用
random.shuffle
并存储结果的副本。在一个循环中重复此操作,每次检查重复项(虽然可能没有)。一旦结果集中有 5000 个项目,就停止。为了解决评论中的问题,Python 的 随机模块 基于 Mersenne Twister ,周期为
2**19937-1
,比27!
大得多,因此它应该适合您的使用.