即使列表不能被10整除,也可以根据百分比将列表分成四个部分.Pyth
发布时间:2020-12-20 11:24:48 所属栏目:Python 来源:网络整理
导读:所以我正在处理一个未知长度的列表.我需要把这个列表分成四个部分. 第一部分=列表的前20% 第二部分=列表的20%到40% 第三部分=列表的40%到80% 第四部分=从列表的80%到100%. 现在问题是,如果列表少于10个元素,我的一些列表将为空.我的问题是如何避免这
所以我正在处理一个未知长度的列表.我需要把这个列表分成四个部分.
第一部分=列表的前20% 第二部分=列表的20%到40% 第三部分=列表的40%到80% 第四部分=从列表的80%到100%. 现在问题是,如果列表少于10个元素,我的一些列表将为空.我的问题是如何避免这个问题. 这是我现在的脚本: x = ["one","two","three","four","five","six","seven","eight","nine","ten"] twentyPercentOne = len(x) * 0.2 twentyPercentTwo = len(x) * 0.4 fourtyPercentThree = len(x) * 0.8 i = 0 j = 2 m = [] while j < (twentyPercentOne + 1): m.append(x[i:j]) i = (i + 2) j = (j + 2) h = [] while j < (twentyPercentTwo + 1): h.append(x[i:j]) i = (i + 2) j = (j + 2) l = [] while j < (fourtyPercentThree + 1): l.append(x[i:j]) i = (i + 2) j = (j + 2) t = x[i:len(x)] 输出: [['one','two']] [['three','four']] [['five','six'],['seven','eight']] ['nine','ten'] 如果列表长度小于10,则输出: [['one','two']] [] [['three','four'],['five','six']] ['seven'] 有人知道怎么做这个吗?我知道它更多的是数学问题,而不是python问题,但我不知道该怎么做,并且已经工作了好几天.我将不胜感激任何帮助. 谢谢 解决方法
这应该是正确的方式,对于任何大小的任意数量的分裂(不只是四个)(只要它们加起来为1):
def percentage_split(seq,percentages): assert sum(percentages) == 1.0 prv = 0 size = len(seq) cum_percentage = 0 for p in percentages: cum_percentage += p nxt = int(cum_percentage * size) yield seq[prv:nxt] prv = nxt (这是一个生成器函数,你可以得到这样的四分位数列表: list(percentage_split(x,[0.25]*4)) ) 如果你安装了numpy它可能有点terser: from numpy import cumsum def percentage_split(seq,percentages): cdf = cumsum(percentages) assert cdf[-1] == 1.0 stops = map(int,cdf * len(seq)) return [seq[a:b] for a,b in zip([0]+stops,stops)] 如果你只想要四个相等的四分位数…… numpy.split(seq,4) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |