如何用简单方法生成无重复坐标的Target类实例?
解决Target实例坐标不重复的简洁方案
要避免生成重复坐标的Target实例,最简洁高效的思路是先预先生成所有合法坐标组合,再从中随机抽取指定数量的不重复坐标来创建实例,完全省去循环判断重复的繁琐操作。
步骤1:调整Target类(可选但更灵活)
修改__init__方法,支持传入指定的x、y坐标,同时保留原有随机生成的功能:
import random from itertools import product class Target: def __init__(self, x=None, y=None): self.x = x if x is not None else random.randint(1, 9) self.y = y if y is not None else random.randint(1, 9) # 可选:添加__repr__方便查看实例坐标 def __repr__(self): return f"Target(x={self.x}, y={self.y})"
步骤2:生成不重复的Target实例
利用random.sample直接从所有合法坐标中抽取指定数量的不重复样本,再批量创建实例:
# 生成1-9所有x、y的坐标组合 all_possible_coords = list(product(range(1, 10), range(1, 10))) # 抽取10个不重复的坐标,创建Target实例 targets = [Target(x, y) for x, y in random.sample(all_possible_coords, 10)]
方案优势
- 无需维护已生成坐标集合、反复重试的冗余代码,逻辑直接清晰
- 依赖Python标准库工具,代码短且可读性高
- 效率远高于“生成-判断-重试”模式,尤其适合生成数量较多的场景
注意事项
网格总共有9×9=81个合法坐标,指定的生成数量不能超过81,否则random.sample会抛出ValueError。
内容的提问来源于stack exchange,提问作者marioswimmer
相关产品推荐
相关产品推荐

