加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

即使列表不能被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,则输出:
????x = [“一”,“二”,“三”,“四”,“五”,“六”,“七”]

[['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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读