【问题标题】:Removing item from list causes the list to become NoneType从列表中删除项目会导致列表变为 NoneType
【发布时间】:2016-11-27 14:44:06
【问题描述】:

我想有一个我忽略的简单解决方案。这比复杂的要好,对吧?

简单地说:

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

导致var 的类型为None。这是怎么回事?

【问题讨论】:

  • 你用错了.remove?你的意思是.pop
  • 不,pop 是删除列表中某个位置的元素,如果我记得的话。我想删除一个特定的元素(例如“d”)。
  • 附带说明,remove(以及index 和其他列表搜索方法)的许多使用表明设计存在问题。也许您应该使用set,或者您拥有或应该拥有索引但没有使用它等等。这绝对不是总是正确的,但值得考虑。

标签: python list nonetype


【解决方案1】:

remove 就地改变列表,并返回None。你必须把它放在一个变量中,然后改变它:

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

【讨论】:

    【解决方案2】:

    remove 不返回任何内容。它就地修改现有列表。无需分配。

    替换

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

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

    现在var 的值为['p', 's', 'c', 'x']

    【讨论】:

    • 是的,就是这样。我可以有剑我试过这个。恩,谢谢你的回答!如果允许,我会在 11 分钟内标记为已回答。
    • 一般来说,几乎any 方法在Python 中改变对象返回None,或者至少是self 以外的东西。 (例外情况大多是特殊情况,例如__iadd__,或者来自具有自己不同习惯用法的框架中的特定领域方法。)
    • 实际上在我的情况下即使没有返回
    • @user32882 可能值得写一个minimal reproducible example 并发布一个新问题,然后
    • 我意识到我犯了和 OP 一样的愚蠢错误。我拍了拍自己的额头,现在一切都很好。
    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2022-11-14
    • 2022-12-20
    • 2016-04-01
    • 2021-08-14
    相关资源
    最近更新 更多