根据条件从列表中删除元素

Remove element from list based on condition

我有一个列表l:

l = [0.22, 0.6, 0.94, 1.28, 1.66, 2., 2.38, 2.72, 3.04, 3.42, 3.76, 4.2, 4.58, 4.94, 5.32, 5.68, 6.08, 6.42, 6.8, 7.22, 7.54]

我想从列表中删除与前一个元素的距离在 1.00 以内的所有元素。如果元素 i+1 已被移除,这当然涉及留在元素 i 并检查元素 i 和元素 i+2 之间的差异等等。所需的输出将是:

output = [0.22, 1.28, 2.38, 3.42, 4.58, 5.68, 6.8]

我显然尝试用 for 循环来做到这一点,但由于失败,我记得 Python 不允许在循环内更改列表。

for index, i in enumerate(l[:-1]):
    j = l[index+1]
    if (j-i) < 1:
        p.remove(j)
    else:
        continue

此外,我知道 itertools 包含 Python 3.10 及更高版本的 pairwise 方法,这使得计算差异成为可能(这可能对这项任务有用)但我我正在使用 3.7.6。 任何解决方案表示赞赏。谢谢!

你可以这样做:

l = [0.22, 0.6, 0.94, 1.28, 1.66, 2., 2.38, 2.72, 3.04, 3.42, 3.76, 4.2, 4.58, 
4.94, 5.32, 5.68, 6.08, 6.42, 6.8, 7.22, 7.54]
l2 = [l[0]]

for elm in l:
    if abs(elm - l2[-1]) > 1:
        l2.append(elm)

print(l2)