Python如何循环获取数组中固定数量的元素
Python how cyclic fetch a pre-fixed number of elements in array
我正在尝试创建一个函数,它将始终 return 我从数组中获取预先固定数量的元素,这些元素将大于预先固定的数量:
def getElements(i,arr,size=10):
return cyclic array return
其中i
代表要获取的数组索引,arr
代表所有元素的数组:
示例:
a = [0,1,2,3,4,5,6,7,8,9,10,11]
b = getElements(9,a)
>> b
>> [9,10,11,0,1,2,3,4,5,6]
b = getElements(1,a)
>> b
>> [1,2,3,4,5,6,7,8,9,10]
其中i = 9
和数组return[9:11]+[0:7]
完成10个元素与i = 1
不需要循环数组只是得到 [1:11]
感谢您的帮助
初始代码(无效):
def getElements(i,arr,size=10):
total = len(arr)
start = i%total
end = start+size
return arr[start:end]
#not working cos not being cyclic
编辑:
我不能为这个脚本做任何import
def get_elements(i, arr, size=10):
if size - (len(arr) - i) < 0:
return arr[i:size+i]
return arr[i:] + arr[:size - (len(arr) - i)]
这是你想要的吗? 已更新以使用较小的数字。
你可以return
array[i: i + size] + array[: max(0, i + size - len(array))]
例如
In [144]: array = list(range(10))
In [145]: array
Out[145]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [146]: i, size = 1, 10
In [147]: array[i: i + size] + array[: max(0, i + size - len(array))]
Out[147]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
In [148]: i, size = 2, 3
In [149]: array[i: i + size] + array[: max(0, i + size - len(array))]
Out[149]: [2, 3, 4]
In [150]: i, size = 5, 9
In [151]: array[i: i + size] + array[: max(0, i + size - len(array))]
Out[151]: [5, 6, 7, 8, 9, 0, 1, 2, 3]
itertools
是一个很棒的图书馆,里面有很多很酷的东西。对于这种情况,我们可以使用 cycle
和 islice
.
from itertools import cycle, islice
def getElements(i, a, size=10):
c = cycle(a) # make a cycle out of the array
list(islice(c,i)) # skip the first `i` elements
return list(islice(c, size)) # get `size` elements from the cycle
如你所愿。
>>> getElements(9, [0,1,2,3,4,5,6,7,8,9,10,11])
[9, 10, 11, 0, 1, 2, 3, 4, 5, 6]
a=[1, 2, 3]
def cyclic(a, i):
b=a*2
return b[i:i+len(a)]
print(cyclic(a, 2))
我正在尝试创建一个函数,它将始终 return 我从数组中获取预先固定数量的元素,这些元素将大于预先固定的数量:
def getElements(i,arr,size=10):
return cyclic array return
其中i
代表要获取的数组索引,arr
代表所有元素的数组:
示例:
a = [0,1,2,3,4,5,6,7,8,9,10,11]
b = getElements(9,a)
>> b
>> [9,10,11,0,1,2,3,4,5,6]
b = getElements(1,a)
>> b
>> [1,2,3,4,5,6,7,8,9,10]
其中i = 9
和数组return[9:11]+[0:7]
完成10个元素与i = 1
不需要循环数组只是得到 [1:11]
感谢您的帮助
初始代码(无效):
def getElements(i,arr,size=10):
total = len(arr)
start = i%total
end = start+size
return arr[start:end]
#not working cos not being cyclic
编辑:
我不能为这个脚本做任何import
def get_elements(i, arr, size=10):
if size - (len(arr) - i) < 0:
return arr[i:size+i]
return arr[i:] + arr[:size - (len(arr) - i)]
这是你想要的吗? 已更新以使用较小的数字。
你可以return
array[i: i + size] + array[: max(0, i + size - len(array))]
例如
In [144]: array = list(range(10))
In [145]: array
Out[145]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [146]: i, size = 1, 10
In [147]: array[i: i + size] + array[: max(0, i + size - len(array))]
Out[147]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
In [148]: i, size = 2, 3
In [149]: array[i: i + size] + array[: max(0, i + size - len(array))]
Out[149]: [2, 3, 4]
In [150]: i, size = 5, 9
In [151]: array[i: i + size] + array[: max(0, i + size - len(array))]
Out[151]: [5, 6, 7, 8, 9, 0, 1, 2, 3]
itertools
是一个很棒的图书馆,里面有很多很酷的东西。对于这种情况,我们可以使用 cycle
和 islice
.
from itertools import cycle, islice
def getElements(i, a, size=10):
c = cycle(a) # make a cycle out of the array
list(islice(c,i)) # skip the first `i` elements
return list(islice(c, size)) # get `size` elements from the cycle
如你所愿。
>>> getElements(9, [0,1,2,3,4,5,6,7,8,9,10,11])
[9, 10, 11, 0, 1, 2, 3, 4, 5, 6]
a=[1, 2, 3]
def cyclic(a, i):
b=a*2
return b[i:i+len(a)]
print(cyclic(a, 2))