我正在尝试创建一个小的负载平衡函数,该函数将获取一个有序数字列表(这些数字将是字符串长度)并输出负载平衡块。这个想法是,我们从索引为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)
为什么不只使用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