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: []