Administrator
发布于 2024-04-11 / 14 阅读
0

Python编程 等长度分割列表算法 - 曲速引擎(Warp Drive)

partition_list函数的设计目的是将一个列表分割成多个子列表,其中每个子列表的长度尽可能相等。

在批处理任务和并行计算在写并发的时候通常要将数据内容写入执行函数当中,因此需要将一个大的数据集分割成多个部分,以便在多个处理器或机器上并行处理时,这个函数可以帮助均匀地分配数据。

输入数据:

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

​得到结果:

lists = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]

​​算法实现


#本文由 曲速引擎(Warp Drive)个人博客 曲速引擎(Warp Drive)CSDN技术博客 创作,转载请说明出处谢谢
#https://blog.csdn.net/siberiaWarpDrive
#https://www.exp-9.com/
def partition_list(lists, number):
    # 计算每个子列表的目标长度,即原列表长度除以4
    children_list_len = int(len(lists) / 4)
    # 使用 zip 和 iter 创建一个迭代器,该迭代器每次返回长度为 children_list_len 的元组
    list_of_groups = zip(*(iter(lists),) * children_list_len)
    # 将元组转换为列表,并将这些列表收集到 data_list 中
    data_list = [list(i) for i in list_of_groups]
    # 计算不能均匀分配到子列表中的元素数量
    count = len(lists) % children_list_len
    # 如果有剩余元素,将它们作为一个新的子列表添加到 data_list 中
    if count != 0:
        data_list.append(lists[-count:])
    return data_list

if __name__ == '__main__':
    lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    success_lists = partition_list(lists, 4)
    for i in success_lists:
        print(i)

本文由 曲速引擎(Warp Drive)个人博客 曲速引擎(Warp Drive)CSDN技术博客 创作,转载请说明出处谢谢