Python 2.7 生成带有约束的随机数的相关列表

Python 2.7 生成带有约束的随机数的相关列表,python-2.7,random,Python 2.7,Random,我有以下代码来生成一些随机数: import random random.seed(1) lambdaj = [] tauj = [] for i in range(30): lambdaj.append(random.randint(2, 15)) tauj.append(random.uniform(10/365, 40/365)) #What I want is: for i in range(len(tauj)): if lambdaj[i]*tauj[i

我有以下代码来生成一些随机数:

import random
random.seed(1)

lambdaj = []
tauj = []

for i in range(30):
    lambdaj.append(random.randint(2, 15))
    tauj.append(random.uniform(10/365, 40/365))

#What I want is:

for i in range(len(tauj)):
    if lambdaj[i]*tauj[i] >= 1:
        #RECALCULATE lambdaj and tauj by increasing the random.seed by 1
所以,我想要做的是我想要一些
lambdaj
tauj
的列表,但是,我不想要相关的
lambdaj[I]*tau[j]>=1
。它们都应该是
<1
。所以,我认为,我需要增加我的种子,让它找到一些满足我需求的种子值。然而,我不能想出一个工作循环来实现它。感谢您的建议。

您的问题意味着任何lambda乘以任何tau必须小于1(
i*j
),但您的测试意味着您实际上只关心相关的lambda和tau(
i*i
):

假设您的代码就是您的意思,那么就不需要找到好的种子:只需重新生成“坏”索引:

或者,在生成数据时只需执行以下操作:

for i in range(30):
    l = j = 5   # something larger than 1
    while l * j >= 1:
        l = random.randint(2, 15)
        j = random.uniform(10/365, 40/365)
    lambdaj.append( l )
    tauj.append( j )

事实上,如果你在寻找真正随机的数据,那么永远不要设定种子。使用此方法,并且通过不设置种子(例如,
.seed(1)
),可以保证您的约束,并且每次脚本调用时您的数据都是随机的。

我相信答案仍然是正确的。第二种方法工作得很好。然而,第一个没有工作,即使我尝试了不同的方式。不过,非常感谢你;你肯定解决了我的问题。
for i in range(len(tauj)):
    while lambdaj[i] * tauj[i] >= 1:
        lambdaj[i] = random.randint(2, 15)
        tauj[i] = random.uniform(10/365, 40/365)
for i in range(30):
    l = j = 5   # something larger than 1
    while l * j >= 1:
        l = random.randint(2, 15)
        j = random.uniform(10/365, 40/365)
    lambdaj.append( l )
    tauj.append( j )