python - 具有排除项的随机数生成器
问题描述
我有 9x9 numpy 数组,里面填充了数字 [1;9]。我需要选择随机位置并将此单元格分配为 0,直到获得一定的难度值。顺便说一句,我的表应该满足某些标准,并且在多次测试中检查了功能。
while current_difficulty > self.difficulty:
i = np.random.randint(0, self.board_size, 1)
j = np.random.randint(0, self.board_size, 1)
if self.unsolved[i, j] != 0 and self.__is_solvable():
self.unsolved[i, j] = 0
current_difficulty -= 1
我需要的是获得不会随时间重复的随机值对(i 和 j)。有什么我可以使用的功能或我可以实现的方法吗?先感谢您。
解决方案
基本思路:生成所有唯一对(希望棋盘不要太大),然后洗牌:
from itertools import product
# ...
indexes = list(product(np.arange(self.board_size), np.arange(self.board_size)))
np.random.shuffle(indexes) # unique indexes in random order
for i, j in indexes:
if some_check(i, j):
break
推荐阅读
- c - 为什么此代码中会出现“分段错误”?
- python - 如何在 azure notebook 中访问 blob 存储中的 np 数组
- javascript - 如何通过匹配货币代码过滤数据
- pascal - 帕斯卡程序在输入后冻结
- java - 从使用 XSD 生成的类生成有效的 XML
- macos - 如何在 AppKit 中观察系统偏好“侧边栏图标大小”的变化?
- excel - system._comobject 在更新 excel 时在 powershell 中没有名为 Cells 的方法
- php - updateOrcreate 的老帮手
- python - 如何将一个列表随机分成 2 个但长度相同的列表
- python - 在 or-tools python 中为调度问题添加软约束