Python从列表中删除大于阈值的元素

2024-04-24

我想从列表中删除大于阈值的元素。

例如,包含元素的列表a = [1,9,2,10,3,6].

我想删除所有大于 5 的元素。

返回应该是[1,2,3]。

我尝试使用 enumerate 和 pop 但它不起作用。

for i,x in enumerate(a):
    if x > 5:
        a.pop(i)

尝试使用列表理解 https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions:

>>> a = [1,9,2,10,3,6]
>>> [x for x in a if x <= 5]
[1, 2, 3]

这说的是,“制作一个新的列表x值其中x来自a但前提是x小于或等于阈值5.

问题与枚举() and pop()方法是它在迭代列表时改变列表——有点类似于当你仍然坐在树枝上时锯掉树枝。所以当(i, x) is (1, 9), the pop(i)变化a to [1,2,10,3,6],但随后迭代前进到(2, 10)意味着该值2永远不会被检查。它从那里分崩离析。

FWIW,如果您需要就地改变列表,只需用切片重新分配它即可:

a[:] = [x for x in a if x <= 5]

希望这可以帮助 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python从列表中删除大于阈值的元素 的相关文章