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

标签 python

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

例如,包含元素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/

相关文章:

python - 在 Python 中使用 functools.partial 重构 lambda 函数

python - 在不更改原始列名的情况下合并 pandas DataFrame

python 到 mysql 插入错误

python - 使用 python 和 urllib2 如何在阅读源代码之前对网页进行身份验证

python - 通过 Python 脚本抓取动态网站 : how to get the values?

android - 为什么Python运行ant build失败?

反向的 Python 日期时间

python - pdfkit 在转换时将 href 从相对路径更改为绝对路径

python - 将日期时间对象转换为整数 python

python - 如何在 Python 中按行的总和对矩阵进行升序排序?