您好,我正在使用python的itertools中的Grouper函数来削减大量selectwherein(idlist)查询,以获得sqlite性能。问题是grouper会填满chunksize的整个空间,即使这个列表要小得多,所以我不得不在这之前添加一个循环和比较,现在我想优化一下。在
# input list shorter than grouper chunk size
input = (1,2,3,4,5)
grouper(10,input)
# desired output = (1,2,3,4,5)
# actual output = (1,2,3,4,5,None,None,None,None,None)
# current fix for this issue
list_chunks = tuple(tuple(n for n in t if n) for t in grouper(10, input))
我认为必须有一种方法来做到这一点,而不是这个循环和比较。在
像这样?在
对于更复杂的情况(例如,列表中有0或者您需要删除与
^{pr2}$None
不同的内容),您可以实现自己的lambda
:甚至是
如果不是筛选出
None
项,而是重写grouper()
以返回所需的是一个选项,则可以使用以下解决方案使用itertools.islice
:或一个较短的等效物(稍难理解):
^{pr2}$示例:
您可以使用
filter
和map
:下面是一个例子:
^{pr2}$最后,如果希望它是一个元组而不是一个列表,则可以将其包装在
tuple()
调用中。在相关问题 更多 >
编程相关推荐