簡體   English   中英

為什么 enumerate() 在這里沒有按預期工作?

[英]Why does enumerate() not work as intended here?

我試圖使用 enumerate 在每 n 次迭代中做一些事情。 在下面的示例中,我使用了一個分塊的可迭代對象。 原始的可迭代對象是一個包含 1000000 個 URL 和生成器的列表,它被分成 1000 個塊。 現在,如果我使用:

if count % 2 == 0:

它按預期工作,即每隔一個塊,它打印出abc 但是,如果我嘗試使用:

if count % 1 == 0:

它不是在每個塊完成后打印出abc ,而是在原始列表中的每個單獨項目完成后打印abc 換句話說,我得到了一百萬個abc輸出而不是 1000 個。我做錯了什么?

def chunk_iterable(iterable, chunk_size):
    chunk = []
    for item in iterable:
        chunk.append(item)
        if len(chunk) == chunk_size:
            yield chunk
            chunk = []
    if chunk:
        yield chunk


async def make_async_requests(directory, file, urls):
    sem = asyncio.BoundedSemaphore(50)
    chunk_size = 10000
    async with aiohttp.ClientSession() as session:
        for count, chunk in tqdm.tqdm(enumerate(chunk_iterable(urls, chunk_size)), total=len(urls)/chunk_size)):
            await tqdm.asyncio.tqdm.gather(*[write_to_file(url, sem, session) for url in chunk])
            if count % 1 == 0:
                print("abc")
                continue

這里的問題不是enumerate() ,而是這里模運算符的使用:

if count % 1 == 0:

這種情況將始終為真,因為 1 的模將始終為零,如果您想要一千個輸出而不是一百萬(如果它是一百萬)嘗試:

if count % 1000 == 0:

暫無
暫無

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

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