繁体   English   中英

在python中随机生成具有不同元素的3元组

[英]Randomly generating 3-tuples with distinct elements in python

我试图在python中生成3元组(x,y,z)以使xyz中没有两个具有相同的值。 此外,变量xyz可以在单独的范围(0,p)(0,q)(0,r) 我希望能够生成n这样的元组。 一种明显的方法是为每个变量调用random.random()并每次检查x=y=z 有更有效的方法吗?

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM