Python:如何每次获得数组的下k个连续元素?

2024-09-01 20:13:05 发布

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

我试图从一个较大的nK+d元素数组中提取一个nextK连续项数组。其中0<;d<;=Kn>;=0。换句话说,在第一次尝试中,我将获得数组[:K],然后是下一次的数组[K:2K],依此类推。在上一次迭代中,所有剩余元素数组[nK:nK+d],即使剩余的项目数小于K。在所有这些之前的操作中,最好保持原始数组不变

例如:

>>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> k_items = get_next_k(arr, k = 3)
>>> print(k_items)
  [1, 2, 3]
>>> k_items = get_next_k(arr, k = 3)
>>> print(k_items)
  [4, 5, 6]
>>> k_items = get_next_k(arr, k = 3)
>>> print(k_items)
  [7, 8, 9]
>>> k_items = get_next_k(arr, k = 3)
>>> print(k_items)
  [10]
>>> print(arr)
  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

有没有一个简单有效的方法来实现这一点


Tags: 方法ltgt元素getitems数组next
3条回答

经过一番脑力激荡和网络研究,我有了一个简单解决问题的想法

我的代码:(get_k.py

class klist(list):
    curKidx = 0

    def get_next_k(self, k = 1):
        list_len = self.__len__()
        if (self.curKidx + k) > list_len:
            k = list_len - self.curKidx
        retKlist = [list.__getitem__(self, idx) for idx in range( self.curKidx, (self.curKidx + k) )]
        self.curKidx = self.curKidx + k
        return retKlist

a = klist([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
print( a.get_next_k(3) )
print( a.get_next_k(3) )
print( a.get_next_k(3) )
print( a.get_next_k(3) )

输出:

# ./get_k.py 
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[0]

另外,这里最大的灵活性之一是,我可以在每次调用中修改K的值

谢谢

itertools.islice与生成器表达式一起使用

from itertools import islice

def get_next_k(curr, k):
    return list(islice(curr, k))

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
curr = (x for x in arr)

for i in range(4):
    print(get_next_k(curr, 3))

输出:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]

您可以尝试以下方法:

import math
def get_next_k(arr,k,idx):
  return arr[k*idx:k*idx+k]

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
k = 3
no_of_iters = int(math.ceil(float(len(arr))/k))
for i in range(no_of_iters):
  print(get_next_k(arr,k,i)

输出

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]

相关问题 更多 >