过滤列表。仅在物品之间有一定距离的情况下获取列表元素?
问题描述:
我只需要获得某种程度上彼此远离的元素/项目。例如,我有一个整数列表:过滤列表。仅在物品之间有一定距离的情况下获取列表元素?
data = [-2000, 1000, 2000, 3500, 3800, 4500, 4600, 5000, 6000]
假设我想只提取具有具有至少彼此之间的距离的那些元素。 从上面的列表中,我需要输出:
[-2000, 1000, 2000, 3500, 4500, 6000]
我过滤这种方式:
filtered.append(data[0])
for index, obj in enumerate(data):
if index < (l - 1):
if abs(obj - data[index+1]) > 999:
filtered.append(data[index+1])
print(filtered)
不希望输出:
[-2000, 1000, 2000, 3500, 6000]
它失败,因为它比较两个相邻的列表元素,irr尽管有些元素应该被过滤出来而不应该被考虑在内。
让我更清楚地表现出来。
原始列表:[-2000, 1000, 2000, 3500, 3800, 4500, 4600, 5000, 6000]
过滤过程:
-2000 - OK
1000 - OK
2000 - OK
3500 - OK
3800 - Out
4500 - Should be OK, but it filtered out compared to 3800. But it should be compared to 3500 (not 3800 which is Out).
如何解决呢?
答
对数据进行排序,然后比较以前的会做到这一点:
data = [-2000, 1000, 2000, 3500, 3800, 4500, 4600, 5000, 6000]
lst = [min(data)] # the min of data goes in solution list
for i in sorted(data[1:]):
if i-lst[-1] > 999: # comparing with last element
lst.append(i) # of the solution list
print (lst)
输出继电器:
[-2000, 1000, 2000, 3500, 4500, 6000]