*之后的参数必须是可迭代的,而不是int

时间:2019-01-21 20:36:36

标签: function python-3.6

我有一个小的脚本,它包含一个列表和一个值,该值表示将列表分成多少大小的子列表:

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或任何其他附件。

1 个答案:

答案 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