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