从列表中删除与前面数字太接近的数字

2024-06-17 13:10:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: ofin列表for时间diffrange数字
2条回答

您的max_diff_between_numbers设置为0:

>>> float(60/300)
0.0

你可能想要的是:

>>> 60/float(300)
0.2

根据你问题的标题,我认为你指的是数字之间的最小差值,而不是最大值。 无论如何,如果出现以下情况,将前面的值压缩在一起可能是个问题: [(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)]

相关问题 更多 >