Python 什么';在列表子类的方法中切片'self'的正确方法是什么?

Python 什么';在列表子类的方法中切片'self'的正确方法是什么?,python,list,slice,Python,List,Slice,我打算创建一个方法来分割列表,但是我这里没有正确的语法,我还没有找到正确的搜索查询来找出如何执行此操作: class BarList(list): """Items in the list are always in ascending order of .date""" def trim(self, start:dt.datetime=None, end:dt.datetime=None): """Removes all bars before `start`

我打算创建一个方法来分割
列表
,但是我这里没有正确的语法,我还没有找到正确的搜索查询来找出如何执行此操作:

class BarList(list):
    """Items in the list are always in ascending order of .date"""
    def trim(self, start:dt.datetime=None, end:dt.datetime=None):
        """Removes all bars before `start` and after `end`"""
        if start:
            for i, bar in enumerate(self):
                if bar.date >= start:
                    self = self[i:]
                    break

在上面的伪代码中,我想表达的正确方法是什么?

之所以
self=self[I://code>不正确,是因为它所做的只是对列表进行切片,并将切片分配给名为
self
的局部变量。它实际上并没有修改列表

要更改列表的内容,可以使用:

这基本上意味着“用
=
符号右侧的值替换列表的全部内容”


问题的另一部分是使
trim
方法正常工作。有一些情况您的代码无法处理。以下是更新的代码:

import datetime as dt

class BarList(list):
    """Items in the list are always in ascending order of .date"""
    def trim(self, start:dt.datetime=None, end:dt.datetime=None):
        """Removes all bars before `start` and after `end`"""
        if start:
            for i, bar in enumerate(self):
                if bar >= start:
                    # if this date is later than `start`, remove
                    # everything up to here
                    self[:] = self[i:]
                    break
            else:
                # if no date greater than `start` was
                # found, delete everything
                del self[:]
试运行:

l = BarList([dt.datetime.now()])
print(l)  # output: [datetime.datetime(2018, 4, 19, 0, 18, 14, 23474)]
l.trim(dt.datetime.now())
print(l)  # output: []
l = BarList([dt.datetime.now()])
print(l)  # output: [datetime.datetime(2018, 4, 19, 0, 18, 14, 23474)]
l.trim(dt.datetime.now())
print(l)  # output: []