Python如何在数组中获取前缀数目的元素

2024-04-20 12:36:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个函数,它将始终从数组中返回一个预先固定的元素数目,该数目将大于预先固定的数目:

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和数组返回[9:11]+[0:7]i = 1来完成10个元素不需要循环数组只需得到[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


Tags: 函数元素sizereturndefnot数组array
3条回答
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)]

这就是你想要的吗?更新为使用较低的数字。

^{} 是一个很棒的图书馆,里面有很多很酷的东西。对于这种情况,我们可以使用cycleislice。你知道吗

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]

你可以回来

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]

相关问题 更多 >