Python列表拆分成块(向后)

Python列表拆分成块(向后),python,python-3.x,Python,Python 3.x,我想将一个给定的python列表拆分成块,类似于下面的链接,但相反 当前转发\u块([1,2,3],2)=[1,2],[3]] # what I currently have def forward_chunk(list, size): for i in range(0, len(list), size): yield list[i:i+size] 但是我想要向后块([1,2,3],2)=[1],[2,3]] # what I currently have def f

我想将一个给定的python列表拆分成块,类似于下面的链接,但相反

当前
转发\u块([1,2,3],2)=[1,2],[3]]

# what I currently have
def forward_chunk(list, size):
    for i in range(0, len(list), size):
        yield list[i:i+size]
但是我想要
向后块([1,2,3],2)=[1],[2,3]]

# what I currently have
def forward_chunk(list, size):
    for i in range(0, len(list), size):
        yield list[i:i+size]

我无法用我的一生让所有的范围和列表片段都工作来实现落后的梦想。有人有什么想法吗?

找出还有多少额外的元素,将列表一分为二,生成第一个片段,然后执行块操作并生成其余的片段

def forward_chunk(lst, size):
    piece = len(lst) % size
    piece, lst = lst[:piece], lst[piece:]
    yield piece
    for i in range(0, len(lst), size):
        yield lst[i:i+size]
像这样的事情也许:

def backward_chunk(l, size):
    start = 0
    for end in range(len(l)%size, len(l)+1, size):
        yield l[start:end]
        start = end

> list(backward_chunk([1, 2, 3], 2))
[[1], [2, 3]]

第一个块大小计算为列表长度和一般块大小的模。请不要调用变量
list

如果需要,可以使用普通的块生成器并反转列表

def chunk(data, size, reverse=False):
    data = data[::-1] if reverse else data
    for n in range(0, len(data), size):
        yield data[n:n+size]
用法示例:

info = [1, 2, 3, 4, 5, 6, 7, 8]
for i in chunk(info, 4):
    print(i)  # => [1, 2, 3, 4], [5, 6, 7, 8]
for i in chunk(info, 4, True):
    print(i)  # => [8, 7, 6, 5], [4, 3, 2, 1]
如果您只想颠倒顺序,而不想颠倒列表本身,那么只要在
reverse
True
时产生
data[n:n+size][:-1]