Python列表拆分成块(BACKWARDS)

Python list split into chunks (BACKWARDS)

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

如何在python中将列表分割成大小均匀的块?

目前forward_chunk([1,2,3],2) = [[1,2], [3]]

不过,我要的是backward_chunk([1,2,3],2) = [[1], [2,3]]

1
2
3
4
# 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
4
5
6
7
8
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


找到将有多少额外的元素,将列表分成两部分,生成第一部分,然后执行块操作并生成其余部分。

1
2
3
4
5
6
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]


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

1
2
3
4
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]

示例用法:

1
2
3
4
5
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]

如果只想颠倒顺序而不想改变列表本身,那么如果reverseTrue的话,只需生成data[n:n+size][::-1]