0

我正在尝试(x,y,z)在 python 中生成 3 元组,这样没有两个xy或者z具有相同的值。x此外,变量yz可以在单独的范围内(0,p)定义(0,q)(0,r)。我希望能够生成n这样的元组。一种明显的方法是调用random.random()每个变量并检查每次是否x=y=z. 有没有更有效的方法来做到这一点?

4

1 回答 1

1

您可以编写生成所需元素的生成器,例如:

def product_no_repeats(*args):
    for p in itertools.product(*args):
        if len(set(p)) == len(p):
            yield p

并对其应用水库采样

def reservoir(it, k):
    ls = [next(it) for _ in range(k)]
    for i, x in enumerate(it, k + 1):
        j = random.randint(0, i)
        if j < k:
            ls[j] = x
    return ls

xs = range(0, 3)
ys = range(0, 4)
zs = range(0, 5)

size = 4

print reservoir(product_no_repeats(xs, ys, zs), size)
于 2012-10-11T09:45:14.197 回答