You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用简单方法生成无重复坐标的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:10:30