[英]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
是否有任何剩余數據,如果有,也將其生成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.