我想使用名称来引用数组/列表索引的索引范围。 另外,我希望能够对其进行算术运算。 例如,我想做
myrange = 3:10
myrange2 = myrange + 5
arr2[myrange2] = arr1[myrange] # This being equivalent to arr2[8:15] = arr1[3:10]
myrange3 = myrange * 2 + 5
arr2[myrange3] = arr1[myrange] # This being equivalent to arr2[11:25] = arr1[3:10]
对于 python 列表和 numpy 数组这可能吗?
最佳答案
你可以简单地使用一个slice()
:
myrange = slice(3, 10)
myrange2 = slice(3 + 5, 10 + 5)
arr2[myrange2] = arr1[myrange]
这可以很容易地变成一个函数:
def add_to_slice(slice_, offset):
return slice(slice_.start + offset, slice_.stop + offset)
myrange = slice(3, 10)
myrange2 = add_to_slice(myrange, 5)
arr2[myrange2] = arr1[myrange]
如果你想使用 +
你需要修补 slice
类(因为 slice
不是可接受的基类)以包含一个 __add__
方法,即:
class Slice(slice):
pass
TypeError: type 'slice' is not an acceptable base type
编辑
“可能足够接近”的方法是将一个 slice
包裹在另一个类周围,例如 Slice
并且,可选地,使其易于访问内部 slice
,例如:
class Slice(object):
def __init__(self, *args):
self.slice_ = slice(*args)
def __call__(self):
return self.slice_
def __add__(self, offset):
return Slice(self.slice_.start + offset, self.slice_.stop + offset, self.slice_.step)
myrange = Slice(2, 5)
myrange2 = myrange + 3
mylist = list(range(100))
print(mylist[myrange()])
print(mylist[myrange2()])
(您可能希望改进生产代码以处理 slice
的属性为 None
的可能性)。
关于python - 使用变量来描述数组/列表索引的索引范围/切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235541/