我想从列表中删除大于阈值的元素。
例如,包含元素a = [1,9,2,10,3,6]
的列表。
我想删除所有大于5的元素。
返回值应为[1,2,3]。
我尝试使用枚举和流行音乐,但它不起作用。
for i,x in enumerate(a):
if x > 5:
a.pop(i)
最佳答案
尝试使用list comprehension:
>>> a = [1,9,2,10,3,6]
>>> [x for x in a if x <= 5]
[1, 2, 3]
这就是说,“仅当x小于或等于阈值5时,创建一个x值的新列表,其中x来自a。
enumerate()和pop()方法的问题在于,它会在迭代列表时对其进行变异-有点类似于在您仍然坐在 Twig 上时锯掉 Twig 。因此,当
(i, x)
为(1, 9)
时,pop(i)将a更改为[1,2,10,3,6]
,但是随后迭代进行到(2, 10)
,这意味着永远不会检查值2。它从那里分崩离析。FWIW,如果您需要就地更改列表,只需用一个切片重新分配它:
a[:] = [x for x in a if x <= 5]
希望这可以帮助 :-)
关于python - Python从列表中删除大于阈值的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59925384/