使用的是python3,代码是要通过循环把init_nums中在covered_nums中的元素删除,代码如下:
init_nums = [3, 5, 6, 7, 8, 11]
covered_nums = [5, 8, 4, 2, 1, 3, 11, 17, 26, 13, 20, 10]
for num in init_nums:
if num in covered_nums:
init_nums.remove(num)
print(init_nums)
运行结果是:
[5, 6, 7, 11]
[5, 11]在covered_nums中但是没有被删除,刚开始我以为错误原因是在循环中改变了init_nums,所以我把init_nums拷贝了一份:
init_nums = [3, 5, 6, 7, 8, 11]
covered_nums = [5, 8, 4, 2, 1, 3, 11, 17, 26, 13, 20, 10]
init_nums_cp = init_nums
for num in init_nums:
if num in covered_nums:
init_nums_cp.remove(num)
print(init_nums_cp)
可是结果还是一样的,不知道为什么,刚刚接触Python,请指教,谢谢。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
init_nums_cp = init_nums[:]
看来,在迭代中进行修改list可能很不稳定.建议新建一个list来收集结果.
比如这样.
改成列表解析,代码会少很多.
使用filter过滤:
我之前也碰到过这个问题,开始特别纠结。最后,用指针分析了一次就明白了。你如果用remove方法其实是移走了当前元素,所有后面的列表元素都会往前推进,这时候你移到下一个元素时已经跳过一个元素了。