如果它们与前面的数字太接近,则从列表中删除数字

时间:2013-06-21 11:05:16

标签: python zip

我需要生成一个显示泊松分布的数字列表(代表时间点),然后返回列表并删除前一个数字后出现的任何数字(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,我似乎无法改进它。任何帮助将不胜感激,谢谢。

2 个答案:

答案 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)]