【发布时间】:2018-06-26 12:16:51
【问题描述】:
我想统计列表的不重叠子序列中的元素个数。例如,如下图所示:
lst = [0.2,1.3,2.2,3.5]
L = 0.5
for x in lst:
lb = x # lowebound
ub = x+L # upperbound
print(lb,ub)
输出是
0.2 0.7 count=1
1.3 1.8 count=1
2.2 2.7 count=1
3.5 4.0 count=1
正如我们所见,这些区间不重叠。此外,在每个区间 [lb, ub] 中,我们只有一个属于 lst 的元素,因此每个区间 count = 1。 但是有一个复杂的情况如下所示
nlst = [0.2,0.6,2.2,3.8]
使用上面的代码会创建我们不想要的重叠间隔。例如使用上面的代码,我们得到
0.2 0.7
0.6 1.1
2.2 2.7
3.8 4.3
现在由于 0.6 包含在第一个 [0.2,0.7] 区间中,因此存在我们不希望的重叠。所需的输出是
0.2 0.7 count = 2
2.2 2.7 count = 1
3.8 4.3 count = 1
如果将原始数组分解为子数组,则可以轻松解决此问题,但是在包含数千个数字的数组中,此类方法的计算量很大。 在上面的示例中,我将间隔显示为输出,这只是为了解释我的问题。我只想要每个间隔的计数。 我能得到帮助吗?
提前致谢。
【问题讨论】:
-
nlst总是排序吗? -
是的。它总是排序的。
标签: python arrays python-3.x counting