首页 > 解决方案 > 删除列表中彼此距离小于 N 的元素

问题描述

假设我有以下列表:

a = [0,5,10,11,15,22]

...而且我想确保列表元素彼此之间始终至少相隔 5,我该怎么做?

预期结果:

[0,5,10,15,22]

我尝试的不是很pythonic:

a.sort()
prev_elem = a[0]
new_list = []
for elem in a[1:]:
    if abs(prev_elem-elem) >= 5:
         new_list.append(prev_elem)
    # update
    prev_elem = elem

标签: pythonlist

解决方案


您可以通过对现有代码进行一些非常小的更改来做到这一点。

更改的行在下面注释。

a = [0,5,10,11,15,22]

a.sort()
prev_elem = a[0]
new_list = [prev_elem]  # <====== initialise with one element
for elem in a[1:]:
    if abs(prev_elem-elem) >= 5:
         new_list.append(elem)  # <===== append the new element
         prev_elem = elem  # <===== indented more (inside "if" block)

print(new_list)

这给出了:

[0, 5, 10, 15, 22]

推荐阅读