我正在尝试在python中生成3元组(x,y,z)
,以使x
,y
或z
中没有两个具有相同的值。此外,变量x
,y
和z
可以在不同的范围(0,p)
,(0,q)
和(0,r)
上定义。我希望能够生成n
这样的元组。一种显而易见的方法是为每个变量调用random.random()
并每次检查是否x=y=z
。有没有更有效的方法来做到这一点?
答案 0 :(得分:1)
您可以编写一个生成所需元素的生成器,例如:
def product_no_repeats(*args):
for p in itertools.product(*args):
if len(set(p)) == len(p):
yield p
并将reservoir sampling应用于它:
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)