带约束的Python列表分块或分页

带约束的Python列表分块或分页,python,pagination,Python,Pagination,如何使用约束块/分页此列表?假设我的页面大小是3,每页我只想要可以被2整除的数字 my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 变化: 既然是分页,我们如何在每次调用中生成一个页面/区块。或者换句话说,假设我有一个叫做paginate的函数 chunks = [[2,4,6],[8,10,12],[14]] 其中页码是您请求的页面,例如:页码=2。特殊情况:如果要获取所有页面,请将页码设置为0 可以按如下方式调用此

如何使用约束块/分页此列表?假设我的页面大小是3,每页我只想要可以被2整除的数字

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
变化: 既然是分页,我们如何在每次调用中生成一个页面/区块。或者换句话说,假设我有一个叫做paginate的函数

chunks = [[2,4,6],[8,10,12],[14]]
其中页码是您请求的页面,例如:页码=2。特殊情况:如果要获取所有页面,请将页码设置为0

可以按如下方式调用此函数:

def paginate(my_list, row_len, page_number=1):

让我们使用名为
more itertools的第三方库

paginate(my_list, 3, 2)   # [8,10,12]
paginate(my_list, 3, 0)   # [[2,4,6],[8,10,12],[14]]
下面是一个

为偶数创建一个生成器,然后执行以下操作:

import more_itertools

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

temp = [num for num in my_list if num % 2 == 0]

list(more_itertools.chunked(temp, 3))

[[2, 4, 6], [8, 10, 12], [14]]

通过仅对最后一个块执行检查和替换,您可以避免对整个块进行迭代以过滤出
None
,这是
None
的唯一可能位置:

# Python 2

gen = (x for x in my_list if x%2==0)
chunks = [[i for i in t if i is not None] for t in map(None, *(gen,)*3)]
print chunks
# [[2, 4, 6], [8, 10, 12], [14]]

在Python3中,
map(None,…)
可以替换为确保最短的块附加有
None
s,而
zip
仅在最短的iterable长度处停止:

gen = (x for x in my_list if x%2==0)
chunks = map(None, *(gen,)*3)
if None in chunks[-1]:
    chunks[-1] = filter(None, chunks[-1])
print(chunks)
# [(2, 4, 6), (8, 10, 12), (14,)]

您可以更具体地给出所需输出的完整工作示例。您可能需要添加指向第三方库的链接。
from itertools import zip_longest

gen = (x for x in my_list if x%2==0)
chunks = [[i for i in t if i is not None] for t in zip_longest(*(gen,)*3)]
print(chunks)
# [[2, 4, 6], [8, 10, 12], [14]]