生成器迭代器的 Batch Chop 问题
Batch Chop issue with generator iterator
我正在 coursena 中进行测试,发现循环生成器与切碎批次有关的问题:
def batch_generator(items, batch_size):
for i in range(0, len(list(items)), batch_size):
yield list[i:i+batch_size]
# Test batch generator
def _test_items_generator():
for i in range(10):
yield i
print(i)
grader.set_answer("a4FK1", list(map(lambda x: len(x), batch_generator(_test_items_generator(), 3))))
错误看起来像:
TypeError Traceback (most recent call last)
<ipython-input-85-a91baa3cf6fa> in <module>()
6
7 print(i)
----> 8 grader.set_answer("a4FK1", list(map(lambda x: len(x), batch_generator(_test_items_generator(), 3))))
<ipython-input-84-4e82a37b7646> in batch_generator(items, batch_size)
12 """
13 for i in range(0, len(list(items)), batch_size):
---> 14 yield list[i:i+batch_size]
15
16 ### YOUR CODE HERE
TypeError: 'type' object is not subscriptable
我不知道应该在哪里解决我的问题。
您正在尝试为内置 list
对象添加下标。您需要将输入 (items
) 转换为列表和下标:
def batch_generator(items, batch_size):
l = list(items)
for i in range(0, len(l), batch_size):
yield l[i:i+batch_size]
如果您不想转换为列表(例如,当 items
本身就是一个生成器时),您也可以遍历 items
输入:
def batch_generator(items, batch_size):
res = []
for item in items:
res.append(item)
if len(res) == batch_size:
yield(res)
res = []
if len(res) > 0:
yield(res)
请注意,我们需要在循环结束时检查 res
中是否有任何剩余数据,如果有,也将其 yield。
我正在 coursena 中进行测试,发现循环生成器与切碎批次有关的问题:
def batch_generator(items, batch_size):
for i in range(0, len(list(items)), batch_size):
yield list[i:i+batch_size]
# Test batch generator
def _test_items_generator():
for i in range(10):
yield i
print(i)
grader.set_answer("a4FK1", list(map(lambda x: len(x), batch_generator(_test_items_generator(), 3))))
错误看起来像:
TypeError Traceback (most recent call last)
<ipython-input-85-a91baa3cf6fa> in <module>()
6
7 print(i)
----> 8 grader.set_answer("a4FK1", list(map(lambda x: len(x), batch_generator(_test_items_generator(), 3))))
<ipython-input-84-4e82a37b7646> in batch_generator(items, batch_size)
12 """
13 for i in range(0, len(list(items)), batch_size):
---> 14 yield list[i:i+batch_size]
15
16 ### YOUR CODE HERE
TypeError: 'type' object is not subscriptable
我不知道应该在哪里解决我的问题。
您正在尝试为内置 list
对象添加下标。您需要将输入 (items
) 转换为列表和下标:
def batch_generator(items, batch_size):
l = list(items)
for i in range(0, len(l), batch_size):
yield l[i:i+batch_size]
如果您不想转换为列表(例如,当 items
本身就是一个生成器时),您也可以遍历 items
输入:
def batch_generator(items, batch_size):
res = []
for item in items:
res.append(item)
if len(res) == batch_size:
yield(res)
res = []
if len(res) > 0:
yield(res)
请注意,我们需要在循环结束时检查 res
中是否有任何剩余数据,如果有,也将其 yield。