面试题答案
一键面试普通遍历删除方式的问题
在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
。