带约束的Python列表分块或分页
如何使用约束块/分页此列表?假设我的页面大小是3,每页我只想要可以被2整除的数字带约束的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 可以按如下方式调用此
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]]