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检查问题中的索引。评论晚了,但仍然是。你真的应该包括为什么你觉得说功能不好。