今天遇到了一个问题,比如我们有如下一个列表:
我们想要删除其中所有小于1
的元素,即删除-1
和0
这两个元素。
最简单的方法为逐个删除,代码如下:
可以看到我们如愿地删除掉了这两个元素,然而这远远不够,因为现在列表一共四个元素,需要删除的元素也只有两个,因此我们可以手动删除。如果我们的列表有10000
个元素,并且需要删除的有几百个,显然这个时候我们无法再手动一一删除了,因此我们考虑使用循环加if
语句来完成。代码如下:
我们的代码逻辑毫无问题,然而最终的结果是我们并没能够删除0
这个元素。这是因为当我们第一次删除-1
这个元素时,循环向下执行,然而由于此时列表内的总元素个数从4
个变为了3
个,因此循环的索引值会直接跳过0
这个元素。因此0
未能触发if
比较语句,最终导致0
没有能够被删除。
因此我们可以得到一条重要的结论,列表在进行循环遍历时不应该同时进行改变列表长度的操作(增删操作)。进一步推广,我们可以得到结论,在Python
中,可迭代对象在进行循环遍历时不应该进行增删操作。
其实这个并不是绝对的,我们可以在外部加一层循环来改变这个情况,以后再说,但是我们还是应该要避免这种操作。
那么我们该如何解决这个问题呢?我们可以通过创建一个新列表来解决这一问题。代码如下:
至此,我们实现了去掉列表中小于某个特定值的所有值的算法,但是这么写并不美观。我们可以使用列表推导式来完成上述同样的操作。
完美,我们使用一行代码实现了这一小算法。
码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~