它总是返回我重复的值示例:
{
"0": [4886, 7051, 9612, 9613, 4895],
"1": [4886, 7051, 9612, 9613, 4895],
"2": [4886, 7051, 9612, 9613, 4895],
"3": [4886, 7051, 9612, 9613, 4895],
"4": [4886, 7051, 9612, 9613, 4895]
}
我不知道为什么计数器在嵌套循环结束时重置。它应该在每个批次中添加下一个产品,而不是从头开始。请告诉我如何解决它?谢谢!
counter = 0
max_number = 4
batches = {}
batch = []
batch_counter = 0
while batch_counter <= max_number:
while counter <= max_number:
batch.append(data[counter])
counter = counter+1
batches[batch_counter] = batch
batch_counter = batch_counter+1
batches = json.dumps(batches)
return HttpResponse(batches)
答案 0 :(得分:3)
在内循环中设置batch
变量后,您没有重置它。
while batch_counter <= max_number:
batch = []
while counter <= max_number:
...
在您的代码中,您使用列表初始化批次一次。相同的列表用于添加元素batch.append(data[counter])
。每次使用batches[batch_counter] = batch
时都会添加此列表。
答案 1 :(得分:2)
这不起作用的原因是因为 batch
在第一次迭代之后仍然是列表。构建完第一个batch
列表后,counter
未再次设置为0
。因此,内部while
循环永远不会再次执行。这不是Python的问题,因为您从未指示Python删除batch
列表。因此,它将简单地采用旧的,并在第二次,第三次等迭代中添加一次。
您可以通过将counter
设置为0
并再次使batch
成为新的空列表来解决问题,例如:
counter = 0
max_number = 4
batches = {}
batch = []
batch_counter = 0
while batch_counter <= max_number:
counter = 0
batch = []
while counter <= max_number:
batch.append(data[counter])
counter = counter+1
batches[batch_counter] = batch
batch_counter = batch_counter+1
batches = json.dumps(batches)
return HttpResponse(batches)
然而,你可以让事情变得更优雅:
max_number1 = max_number+1
batch = {i : data[max_number1*i:max_number1*(i+1)] for i in range(max_number1)}
batches = json.dumps(batches)
return HttpResponse(batches)
替换整个代码片段。
答案 2 :(得分:0)
因为你的计数器到达max_number(内部循环),这就是为什么内循环只执行一次,在跳过内部循环后你设置相同的批处理&#39;在&#39;批次&#39;。