Python如何循环获取数组中预先固定数量的元素

时间:2016-09-16 05:43:47

标签: python arrays circular-list

我正在尝试创建一个函数,它总是会从数组中返回一个预先固定数量的元素,这些元素将大于预先定义的数字:

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]以完成 10个元素i = 1不需要循环数组只需获取{{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

4 个答案:

答案 0 :(得分:3)

你可以回来

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]

答案 1 :(得分:3)

itertools 是一个很棒的图书馆,有很多很棒的东西。在这种情况下,我们可以使用 <div class="row"> <div class="input-field col s10 m6"> <input id="near_metro" type="text"> <label for="near_metro" class="">Near Metro Station</label> </div> <div class="col s2 m2"> <button class="btn-floating btn-large waves-effect waves-light blue" type="submit" name="action" data-ng-submit="addNew(row in connectivity)" value="<%row.value%>"><%row.text%>> <i class="material-icons right">add</i> </button> </div> <div class="input-field col s12 m4"> <input id="road" type="text"> <label for="road" class="">Road</label> </div> </div> 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

答案 2 :(得分:2)

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)]

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

答案 3 :(得分:2)

a=[1, 2, 3]
def cyclic(a, i):
    b=a*2
    return b[i:i+len(a)]
print(cyclic(a, 2))