zoukankan      html  css  js  c++  java
  • 列表(list)之三 -如何较为均匀的将任意字符串按指定组数分组,方差最少

          当字符串的长度不是份数的整数倍时如何均匀地分割,例如:长度为11的字符串要分割成4份,有很多种分法,比如3, 3, 3, 2(前3个字符一份,中间3个一份,再中间3个一份,最后2个一份)这种是比较均匀的分法,即字符串的长度的方差最小。

    思路:要把14个字符,分成3组,则可先得到三组列表,每组4个字符,14/3余数2,则将余数2分别均匀的添加到两组列表中,则得4,5,5

    实例:

    s = "abcdefghijklmn"
    n = 5

    方法一:

    def avsplit1(s, n):
        fn = len(s)//n
        rn = len(s)%n
        ar = [fn+1]*rn+ [fn]*(n-rn)
        si = [i*(fn+1) if i<rn else (rn*(fn+1)+(i-rn)*fn) for i in range(n)]
        sr = [s[si[i]:si[i]+ar[i]] for i in range(n)]


        return sr

    print(avsplit1(s,n))

    输出:

    ['abc', 'def', 'ghi', 'jkl', 'mn']

    方法二:

    def avsplit2(s, n):
        fn = len(s)//n
        rn = len(s)%n
        sr = []
        ix = 0


        for i in range(n):
            if i<rn:
            sr.append(s[ix:ix+fn+1])
            ix += fn+1
        else:
           sr.append(s[ix:ix+fn])
           ix += fn
        return sr

    print(avsplit2(s,n))

    输出:

    ['abc', 'def', 'ghi', 'jkl', 'mn']

    仙衣眠云碧岚袍,一襟潇洒,两袖飘飘。玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
  • 相关阅读:
    js中return;、return true、return false;区别
    JS跨域设置和取Cookie
    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)
    IIS7中Ajax.AjaxMethod无效的原因及解决方法
    ajax 跨域的问题 用js绕过跨域
    微服务笔记
    smali语法笔记
    Go Micro 入门笔记
    介绍微服务框架Micro笔记
    JS任务队列--笔记
  • 原文地址:https://www.cnblogs.com/max520liuhu/p/8819595.html
Copyright © 2011-2022 走看看