Python列表拆分为块(BACKWARDS)

时间:2016-05-03 08:15:37

标签: python python-3.x

我想将给定的python列表拆分为块,类似于以下链接,但反过来。

How do you split a list into evenly sized chunks in Python?

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

但我想要backward_chunk([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]

我不能为我的生活做出所有范围和列表切片的工作,以实现落后的梦想。有人有什么想法吗?

3 个答案:

答案 0 :(得分:3)

STH。像这样可能:

web

第一个块大小计算为列表长度和一般块大小的模数。请不要调用变量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]]

答案 1 :(得分:2)

找出将要有多少额外元素,将列表拆分为两个,生成第一个部分,然后执行块操作并完成其余部分。

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]

答案 2 :(得分:0)

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

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]

如果您只想反转ORDER而不是列表本身,如果data[n:n+size][::-1]reverse,则只需收取True