我需要生成一个显示泊松分布的数字列表(代表时间点),然后返回列表并删除前一个数字后出现的任何数字(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]
目前,唱这个zip函数x-y对于每个x-y返回0.0,我似乎无法改进它。任何帮助将不胜感激,谢谢。
答案 0 :(得分:2)
您的max_diff_between_numbers
设置为0:
>>> float(60/300)
0.0
你可能想要的是:
>>> 60/float(300)
0.2
答案 1 :(得分:0)
根据你问题的标题,我认为你的意思是min_diff_between_numbers不是最大值。 无论如何,将前面的值压缩在一起可能是一个问题,如果,让我们说: [(A,B),(C,D)]其中(A,B)失败,(C,D)失败,但(B,C)通过或(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)]