【问题标题】:How to override the insert functionality of a list to return the list如何覆盖列表的插入功能以返回列表
【发布时间】:2014-08-16 05:47:26
【问题描述】:

在python中,列表有一个插入方法,它返回None。

li = ['a','b']
print li.insert(1,'a')
None

我需要它来返回列表,

print li.insert(1,'a')
['a','a','b']

我试图通过创建一个新类来做到这一点,但我被卡住了

class Nlist(list):
    def insert(self,*args,**kwargs):
        super(Nlist,self).insert(*args,**kwargs)
        return #what?

【问题讨论】:

  • 我觉得我可能遗漏了一些东西,但是您是否有理由不能用print li 打印新列表?如果有原因这不充分,那么您应该编辑问题并解释原因并解释所涉及的用例。
  • @shuttle87 我可以,但我正在尝试做这个简单的覆盖,这样我就不必为临时分配使用额外的变量。
  • 我不确定我是否理解,列表是可变的,因此在使用 insert 时必须修改一个预先存在的列表。临时赋值的额外变量是怎么来的?
  • @shuttle87 这可能很愚蠢,但我有一个字符串,它没有插入方法,所以我将其转换为列表,应用插入,然后使用连接将其重新转换为字符串, 全部在一个列表理解中,其中有几个字符串迭代。我会想一个更好的方法,但现在这解决了我的问题。
  • @yayu 你刚才描述的是X-Y problem。询问您最初的问题,而不是您想出的解决方法。

标签: python


【解决方案1】:

而不是

    li = ['a','b']
    print li.insert(1,'a')
    None

这样做

    li = ['a','b']
    li.insert(1,'a')
    print li
    ['a','a','b']

【讨论】:

    【解决方案2】:

    你可以像这样子类列表:

    class Nlist(list):
        def insert(self, *args, **kwargs):
            super(Nlist, self).insert(*args, **kwargs)
            return self
    

    【讨论】:

    猜你喜欢
    • 2014-01-01
    • 2013-04-08
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多