我有一个小的脚本,它包含一个列表和一个值,该值表示将列表分成多少大小的子列表:
async function asyncSearchWithOutFilter(query, from, to) {
return new Promise((resolve, reject) => {
Product.esSearch(
{
from: from,
size: to,
query: {
multi_match: {
query: query.suche,
fields: [ "Title^10", "ItemCat^5" ]
}
},
aggs: {
mainCats: {
terms: { field: "MainCat.keyword" }
},
itemCats: {
terms: { field: "ItemCat.keyword" }
},
itemShops: {
terms: {
field: "Shop.keyword"
}
}
}
},
{},
async (err, results) => {
if (err) throw err;
let res = await results;
/* console.log("-------------Total Hits---------------");
console.log(res.hits.total);
console.log("-----------------------------------------");
console.log("-------------Shops---------------");
console.log(res.aggregations.itemShops.buckets);
console.log("-----------------------------------------");
console.log("-------------Item-Categories---------------");
console.log(res.aggregations.itemCats.buckets);
console.log("-----------------------------------------"); */
resolve(res);
}
);
});
}
这有效。我得到[1,2] [3,4] [5]
但是,如果我尝试从函数返回sub并在循环中打印它,则会失败:*后的参数必须是可迭代的,而不是int
def chunk(alist, n):
i = 0
j = n
while j < (len(alist) + 2):
sub = alist[i:j]
i += n
j += n
print(sub)
chunk([1, 2, 3, 4, 5], 2)
sub是可迭代的(列表)。不知道我在做什么错。
注意不能使用itertools或任何其他附件。
答案 0 :(得分:0)
您的sub
变量仅包含列表的一部分。而是应将其作为chunks
函数的返回值附加到列表列表中:
def chunks(alist, n):
i = 0
j = n
output = []
while j < (len(alist) + 2):
output.append(alist[i:j])
i += n
j += n
return output
for chunk in chunks([1, 2, 3, 4, 5], 2):
print(*chunk)
这将输出:
1 2
3 4
5