从列表中删除项目导致列表变为NoneType

22

我想象中有一个简单的解决方案,但可能是我忽略了它。比起复杂的解决方法,这样更好,对吧?

简单地说:

var = ['p', 's', 'c', 'x', 'd'].remove('d')

var的类型更改为None。这是怎么回事?


你使用.remove的方式不对吗?你是不是想用.pop - g.d.d.c
2
不,如果我没记错的话,pop 是从列表中删除特定位置的元素。我想要删除一个特定的元素(比如 'd')。 - Joseph_Renerr
顺便说一下,许多对removeindex和其他列表搜索方法的使用都是设计上存在问题的迹象。也许您应该使用一个set,或者可能已经有了索引但没有使用它等。这绝对不是_始终如此_,但值得思考。 - abarnert
2个回答

30

remove不返回任何内容。它会直接修改原始列表。不需要进行赋值操作。

替换

var = ['p', 's', 'c', 'x', 'd'].remove('d') 

var = ['p', 's', 'c', 'x', 'd']
var.remove('d') 
现在,var 将具有值 ['p', 's', 'c', 'x']

没错,就是这样。我本来以为我试过了。好吧,感谢你的答案!等11分钟后允许我回来标记为已答复。 - Joseph_Renerr
2
通常情况下,在Python中,几乎任何改变对象的方法都会返回None,或者至少是除了self之外的其他东西。(例外情况大多是特殊情况,比如__iadd__,或者来自具有自己不同惯用语的框架的领域特定方法。) - abarnert
实际上在我的情况下,即使那样也返回空。 - user32882
1
@user32882 可以考虑编写一个 [mcve] 并发布一个新问题。 - Kevin
我意识到自己犯了和楼主一样的低级错误。我拍打了一下自己的额头,现在一切都好了。 - user32882

3

remove方法会直接在原列表上进行操作,并返回None。你需要将其赋值给一个变量,然后再进行修改:

>>> var = ['p', 's', 'c', 'x', 'd']
>>> var.remove('d')   # Notice how it doesn't return anything.
>>> var
['p', 's', 'c', 'x']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接