3 回答
TA贡献1865条经验 获得超7个赞
Python标准库中没有“列表切片”类(也不是内置的)。因此,您确实需要一个类,尽管它不必很大-尤其是如果您对“只读”和“紧凑”切片感到满意。例如:
import collections
class ROListSlice(collections.Sequence):
def __init__(self, alist, start, alen):
self.alist = alist
self.start = start
self.alen = alen
def __len__(self):
return self.alen
def adj(self, i):
if i<0: i += self.alen
return i + self.start
def __getitem__(self, i):
return self.alist[self.adj(i)]
这有一些局限性(不支持“切片”),但对于大多数目的来说可以。
为了使这个序列R / W你需要添加__setitem__,__delitem__和insert:
class ListSlice(ROListSlice):
def __setitem__(self, i, v):
self.alist[self.adj(i)] = v
def __delitem__(self, i, v):
del self.alist[self.adj(i)]
self.alen -= 1
def insert(self, i, v):
self.alist.insert(self.adj(i), v)
self.alen += 1
TA贡献1872条经验 获得超3个赞
也许只使用一个numpy数组:
In [19]: import numpy as np
In [20]: l=np.arange(10)
基本切片numpy数组返回一个view,而不是一个副本:
In [21]: lv=l[3:6]
In [22]: lv
Out[22]: array([3, 4, 5])
改变l影响lv:
In [23]: l[4]=-1
In [24]: lv
Out[24]: array([ 3, -1, 5])
改变lv影响l:
In [25]: lv[1]=4
In [26]: l
Out[26]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
添加回答
举报