Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的循环数组索引_Python_List - Fatal编程技术网

Python中的循环数组索引

Python中的循环数组索引,python,list,Python,List,我希望得到一个圆形的数组(或矩阵),这样 让我们: 那么我想 a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 1 a[4] = 2 a的所有索引值的Etc 原因是因为我有一个矩阵图像,我试图处理它,如果它在一个方向离开边缘,它应该在另一侧重新出现 任何关于如何做到这一点干净的提示将不胜感激 可以使用模运算符,如下所示 print a[3 % len(a)] import numpy as np class CustomArray(np.ndarray): de

我希望得到一个圆形的数组(或矩阵),这样

让我们:

那么我想

a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 1
a[4] = 2
a的所有索引值的Etc

原因是因为我有一个矩阵图像,我试图处理它,如果它在一个方向离开边缘,它应该在另一侧重新出现


任何关于如何做到这一点干净的提示将不胜感激

可以使用模运算符,如下所示

print a[3 % len(a)] 
import numpy as np

class CustomArray(np.ndarray):
    def __new__(cls, *args, **kwargs):
        return np.asarray(args[0]).view(cls)

    def __getitem__(self, index):
        return np.ndarray.__getitem__(self, index % len(self))

a = CustomArray([1, 2, 3])
for index in xrange(5):
    print a[index]
如果您不想像这样使用模运算符,那么您需要对
list
进行子类化并自己实现

class CustomList(list):
    def __getitem__(self, index):
        return super(CustomList, self).__getitem__(index % len(self))

a = CustomList([1, 2, 3])
for index in xrange(5):
    print index, a[index]
输出

0 1
1 2
2 3
3 1
4 2
如果要对Numpy数组执行相同的操作,可以这样做

print a[3 % len(a)] 
import numpy as np

class CustomArray(np.ndarray):
    def __new__(cls, *args, **kwargs):
        return np.asarray(args[0]).view(cls)

    def __getitem__(self, index):
        return np.ndarray.__getitem__(self, index % len(self))

a = CustomArray([1, 2, 3])
for index in xrange(5):
    print a[index]

有关Numpy数组子类化的更多信息,请参见(多亏了)

拥有这样的功能对您的代码不好。而是编写一个生成函数,生成循环值

numbers = [1, 2, 3]

def returnNumber():
    """
    A circular array for yielding list members repeatedly 
    """
    index = -1
    while True:
        index += 1
        yield slangWords[index % len(numbers)]

# Now you can use this generator
numberGenerator = returnNumber()
numberGenerator.next() # returns 1 
numberGenerator.next() # returns 2
numberGenerator.next() # returns 3
numberGenerator.next() # returns 1
numberGenerator.next() # returns 2
你可以非常简单地:

mainArr = [5,2,1,4,2]
def getRangeArray(startIndexInMainArray):
    s = mainArr[startIndexInMainArray::]
    b=len(mainArr)-len(s)
    return (s+mainArr[0:b])

print(mainArr)
print(getRangeArray(4)) # What is the first index?

#for index 4
#[5, 2, 1, 4, 2]  before
#[2, 5, 2, 1, 4]  after

#for index 2
#[5, 2, 1, 4, 2]  before
#[1, 4, 2, 5, 2]  after

#for index 0
#[5, 2, 1, 4, 2]  before
#[5, 2, 1, 4, 2]  after

itertools
iterationsWait,它们是Python列表还是numpy数组?OP希望一次又一次地循环。@sshashank124检查问题中的索引。评论晚了,但仍然是。你真的应该包括为什么你觉得说功能不好。