Python list split into chunks (BACKWARDS)
我想把一个给定的python列表分割成块,类似于下面的链接,但相反。
如何在python中将列表分割成大小均匀的块?
目前
不过,我要的是
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]] |
第一个块大小计算为列表长度和一般块大小的模。请不要调用变量
找到将有多少额外的元素,将列表分成两部分,生成第一部分,然后执行块操作并生成其余部分。
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] |
如果只想颠倒顺序而不想改变列表本身,那么如果