Python 去掉列表中小于某个特定值的所有值

今天遇到了一个问题,比如我们有如下一个列表:

list1 = [-1, 0, 1, 2]

我们想要删除其中所有小于1的元素,即删除-10这两个元素。
最简单的方法为逐个删除,代码如下:

list1 = [-1, 0, 1, 2]
list1.remove(-1)
list1.remove(0)
print(list1)
"""
result:
[1, 2]
"""

可以看到我们如愿地删除掉了这两个元素,然而这远远不够,因为现在列表一共四个元素,需要删除的元素也只有两个,因此我们可以手动删除。如果我们的列表有10000个元素,并且需要删除的有几百个,显然这个时候我们无法再手动一一删除了,因此我们考虑使用循环加if语句来完成。代码如下:

list1 = [-1, 0, 1, 2]
for i in list1:
    if i <= 0:
        list1.remove(i)
print(list1)
"""
result:
[0, 1, 2]
"""

我们的代码逻辑毫无问题,然而最终的结果是我们并没能够删除0这个元素。这是因为当我们第一次删除-1这个元素时,循环向下执行,然而由于此时列表内的总元素个数从4个变为了3个,因此循环的索引值会直接跳过0这个元素。因此0未能触发if比较语句,最终导致0没有能够被删除。
因此我们可以得到一条重要的结论,列表在进行循环遍历时不应该同时进行改变列表长度的操作(增删操作)。进一步推广,我们可以得到结论,在Python中,可迭代对象在进行循环遍历时不应该进行增删操作

其实这个并不是绝对的,我们可以在外部加一层循环来改变这个情况,以后再说,但是我们还是应该要避免这种操作。

那么我们该如何解决这个问题呢?我们可以通过创建一个新列表来解决这一问题。代码如下:

list1 = [-1, 0, 1, 2]
list2 = []
for i in list1:
    if i >= 1:
        list2.append(i)
print(list2)
"""
result:
[1, 2]
"""

至此,我们实现了去掉列表中小于某个特定值的所有值的算法,但是这么写并不美观。我们可以使用列表推导式来完成上述同样的操作。

list1 = [-1, 0, 1, 2]
list2 = [i for i in list1 if i > 0]
print(list2)
"""
result:
[1, 2]
"""

完美,我们使用一行代码实现了这一小算法。

码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的大熊猫

你的鼓励将是我写作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值