MST

星途 面试题库

面试题:Python列表删除元素安全机制在循环中的应用

给定一个列表`nums = [5, 10, 15, 10, 20]`,要在遍历列表的同时删除所有值为10的元素。请使用安全的删除机制实现,解释为何普通遍历删除方式会出现问题,以及你所采用方法的原理。
34.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

普通遍历删除方式的问题

在Python中,如果直接在普通的for循环中删除列表元素,会导致索引混乱。因为当删除一个元素后,列表的长度会发生变化,索引也会重新排列。例如,在遍历到索引i的元素并删除它后,原本索引i+1的元素会移动到索引i的位置,但是循环的索引已经自增到i+1,这样就会跳过新移动到索引i位置的元素,导致删除不完全。

安全删除方式及原理

可以使用列表推导式来创建一个新的列表,该列表不包含值为10的元素。原理是通过遍历原列表,将不符合删除条件(即值不为10)的元素添加到新列表中,从而实现安全删除。代码如下:

nums = [5, 10, 15, 10, 20]
nums = [num for num in nums if num != 10]
print(nums) 

上述代码中,列表推导式[num for num in nums if num != 10]遍历nums列表,对于每个元素num,如果其值不等于10,则将其保留在新列表中,最后将新列表重新赋值给nums

另外一种方法是使用filter函数,原理类似,filter函数会根据指定的过滤条件筛选可迭代对象中的元素。代码如下:

nums = [5, 10, 15, 10, 20]
nums = list(filter(lambda num: num != 10, nums))
print(nums) 

filter函数接收一个过滤函数(这里使用匿名函数lambda num: num != 10)和一个可迭代对象nums,返回一个迭代器,通过list函数将其转换为列表,从而得到不包含值为10的元素的新列表,并重新赋值给nums