根据条件从列表中删除元素
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)
我有一个列表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)