0

我需要生成一个显示泊松分布的数字列表(将代表时间点),然后返回列表并删除前一个数字之后出现的任何数字(60/300)。

到目前为止,我已经生成了这段代码:

a = range(1,20000,100)
b = range(1,4500,10)

list_of_numbers=[]
for i in a:    
    for j in b:    
        i = float(random.expovariate(j)*10000)
        list_of_numbers.append(i)

list_of_numbers.sort()

max_diff_between_numbers = float(60/300)

final_number_list = [(x,y) for x,y in zip(list_of_numbers[1:],list_of_numbers[:-1]) if (x-y)>max_diff_between_numbers]

目前,sing 这个 zip 函数 xy 对于每个 xy 返回为 0.0,我似乎无法改进它。任何帮助将不胜感激,谢谢。

4

2 回答 2

2

max_diff_between_numbers设置为 0:

>>> float(60/300)
0.0

你可能想要的是:

>>> 60/float(300)
0.2
于 2013-06-21T11:30:06.447 回答
0

根据您问题的标题,我认为您的意思是 min_diff_between_numbers 不是 max。无论如何,如果(A,B)失败,(C,D)失败,但(B,C)通过,则将前面的值压缩在一起可能会出现问题:[(A,B),(C,D)]或 (A, D) 通过。

所以基本上,算法必须检查与最后传递的值的差异,而不是预先确定的对。我相信列表推导在创建时无法解决自身问题,因此必须分两个阶段完成。

import random

a = range(1, 20000, 100)
b = range(1, 4500, 10)

list_of_numbers=[]
for i in a:    
    for j in b:    
        i = float(random.expovariate(j) * 10000)
        list_of_numbers.append(i)

list_of_numbers.sort()

min_diff_between_numbers = 60.0 / 300

final_number_list = list_of_numbers[:1]
[final_number_list.append(x) for x in list_of_numbers[1:] if((x - final_number_list[-1]) > min_diff_between_numbers)]
于 2013-06-21T12:35:35.913 回答