python - 使用变量来描述数组/列表索引的索引范围/切片

标签 python numpy indexing slice

我想使用名称来引用数组/列表索引的索引范围。 另外,我希望能够对其进行算术运算。 例如,我想做

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/

相关文章:

python - 如何在 python tkinter 中的两个输入字段编号之间创建随机数?

MySQL - 搜索自连接和范围或数据

java - Neo4j 中批量插入期间的数字索引

python - 交换元组中的对象 - python

python - 表面在 Matplotlib 3D 图中消失

python - 使用 matplotlib 更有效地绘制多边形

python - 根据多个范围从数组中检索间隔

sql - 哪些列应该被索引?

python - MySQL Python 查询单独工作但在参数化时失败

python - 无需缝合图像的OpenCV曝光补偿