簡體   English   中英

生成器迭代器的 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是否有任何剩余數據,如果有,也將其生成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM