Python列表元素删除疑问:移除所有1的代码为何返回None?
为什么你的代码返回None?
嗨,我来帮你拆解这个问题:
首先最直接的原因是 list.remove()方法本身没有返回值 —— 它只会直接修改原列表,把指定元素删掉,不会返回任何内容(也就是默认返回None)。你把v.remove(1)的结果赋值给result,那result自然就是None了,最后打印它肯定输出None。
另外还要提醒你,你这段代码还有个隐藏问题:在遍历列表的同时修改列表(删除元素)会导致部分元素被漏处理。比如原列表里的元素会因为删除操作往前移位,遍历的索引不会同步调整,导致有些1可能没被检查到。举个例子,假设列表是[1,1,2],第一次删除第一个1后,列表变成[1,2],下一次遍历的是原索引1的位置,也就是现在的2,这时候第二个1就被跳过了。
如果你的目标是得到一个移除了所有1的列表,推荐用更安全的列表推导式,直接生成新列表:
v = [1,2,1,3,1,4,5,55,1] result = [x for x in v if x != 1] print(result) # 输出: [2, 3, 4, 5, 55]
要是你一定要修改原列表,那可以倒序遍历,这样删除元素不会影响前面还没遍历到的元素:
v = [1,2,1,3,1,4,5,55,1] for i in reversed(v): if i == 1: v.remove(i) print(v) # 输出: [2, 3, 4, 5, 55]
内容的提问来源于stack exchange,提问作者barskyn
相关产品推荐
相关产品推荐

