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']

    仙衣眠云碧岚袍,一襟潇洒,两袖飘飘。玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
  • 相关阅读:
    Retrieve Excel Workbook Sheet Names
    总股本和流通股本
    Net序列化与数据压缩类
    HTTP Compression 速用方法
    市净率
    兼容FF,IE,Chrome的js离开或刷新页面检测
    【转】不能执行已释放的Script 代码
    三款在线css3样式生成工具
    不固定个数的子元素自适应居中
    收集几个浏览器好用插件工具
  • 原文地址:https://www.cnblogs.com/max520liuhu/p/8819595.html
Copyright © 2011-2022 走看看