将负载均衡功能转换为生成器

问题描述 投票:0回答:1

我正在尝试创建一个小的负载平衡函数,该函数将获取一个有序数字列表(这些数字将是字符串长度)并输出负载平衡块。这个想法是,我们从索引为0(最小字符串长度)的块开始,然后将索引为-1(最长字符串长度)添加到其中。然后重复此过程,直到用尽字符串长度(存储在list_ordered中),以便每个块都具有所需的chunk_size。无论如何,由于我们将所有数据存储在列表res的列表中,因此下面的函数可以正常工作,但不能完全扩展。我的问题是,考虑到我想要的以及下面的代码,您能帮我将此函数转换为生成器吗?

谢谢!

def chunk_generator_load_balanced(list_ordered,chunk_size):
    n_chunks=ceil(len(list_ordered)/chunk_size)
    res=[]
    direction_chunks={}
    for i in range(n_chunks):
        res.append([])
        direction_chunks[i]=True
    chunk_index=0
    while list_ordered:
        if direction_chunks[chunk_index]:
            chunk_val=list_ordered.pop(0)
            direction_chunks[chunk_index]=False
        else:
            chunk_val=list_ordered.pop(-1)
            direction_chunks[chunk_index]=True
        res[chunk_index].append(chunk_val)
        if chunk_index==n_chunks-1: chunk_index=0
        else: chunk_index+=1
    return res

if __name__ == '__main__':
    list_keys=[i for i in range(50)]
    a=chunk_generator_load_balanced(list_keys,10)

python generator
1个回答
0
投票

为什么不只使用yield而不是在chunk_generator_load_balanced函数中返回?

我的意思是:

def chunk_generator_load_balanced(list_ordered,chunk_size):
n_chunks=ceil(len(list_ordered)/chunk_size)
res=[]
direction_chunks={}
for i in range(n_chunks):
    res.append([])
    direction_chunks[i]=True
chunk_index=0
while list_ordered:
    if direction_chunks[chunk_index]:
        chunk_val=list_ordered.pop(0)
        direction_chunks[chunk_index]=False
    else:
        chunk_val=list_ordered.pop(-1)
        direction_chunks[chunk_index]=True
    res[chunk_index].append(chunk_val)
    if chunk_index==n_chunks-1: chunk_index=0
    else: chunk_index+=1
yield res
© www.soinside.com 2019 - 2024. All rights reserved.