python列表按比例或长度拆分

按照长度拆分列表:

    def split_by_length(init_list, children_list_len):
        """
        按照长度拆分给定数组
        :param init_list: 
        :param children_list_len: 
        :return:
        """
        list_of_groups = zip(*(iter(init_list),) * children_list_len)
        end_list = [list(i) for i in list_of_groups]
        count = len(init_list) % children_list_len
        end_list.append(init_list[-count:]) if count != 0 else end_list
        return end_list

按比例额拆分:

def split_by_ratio(arr, *ratios):
    """
    按比例拆分数组
    :param arr:
    :param ratios: 该参数的个数即为子数组的个数 eg: 0.5,0.5即为拆分两个各占50%的子数组
    :return:
    """
    arr = np.random.permutation(arr)
    ind = np.add.accumulate(np.array(ratios) * len(arr)).astype(int)
    return [x.tolist() for x in np.split(arr, ind)][:len(ratios)]

 

posted @ 2021-11-11 10:33  liown  阅读(1909)  评论(0编辑  收藏  举报