Python - 根据计算的百分比返回列表的区域

标签 python list

我在 python 中有一个相当长的列表,我想在一个基于 3 个百分比的较短列表中返回它的一部分。如果第一个百分比是 30%,则需要返回前 30% 的值,如果第三个百分比是 50%,则需要返回长列表值的后半部分。

这是我目前所拥有的,它存在舍入问题并且是一个丑陋的解决方案

  class OM():
    def __init__(self,name):
      self.name = name
      self.total = 120
      self.a = 21
      self.b = 34
      self.c = 65

    def hRange(self,action):
      if self.total > 0:
        a_perc = int(self.a / float(self.total) *169)
        b_perc = int(self.b / float(self.total) *169)
        c_perc = int(self.c / float(self.total) *169)
        if action=='a': return lst[:aperc]
        elif action=='b': return lst[a_perc:a_perc+b_perc]
        elif action=='c': return lst[-c_perc:]

      else:
        raise Exception

我意识到这根本没有很好的编码,(将第一个长度硬编码为 169,没有捕捉到不同的 Action 等等)我只是想帮助解释我试图做的事情。

在我的实际实现中,值 total、a、b、c 将被初始化为 0,另一个方法将更新它们,因为它们只是计数。我只是在这里将它们设置为一些随机值,以便代码返回百分比。

如果有人能就如何以更好的方式做这件事给我任何建议,我将不胜感激。

最佳答案

如果我理解正确,你想保留三个列表,基于开始和结束的特定百分比加上“中间”:

def split_list(mylist, a, b):
    l = len(mylist)
    return ( mylist[:int(a*l/100)], 
             mylist[int(a*l/100):-int(b*l/100)],
             mylist[-int(b*l/100):] )

其中 a 和 b 是百分比(从 0 到 100)。它与你的实现几乎相同,但你只需要使用两个百分比(如果中间列表是两端修剪后的剩余部分)。我将留给您将其合并到您的代码中...

关于Python - 根据计算的百分比返回列表的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302927/

相关文章:

c# - 如何在 C# 中过滤包含对象的列表?

python - 如何使列表索引可互换,如 ['a' 、 'b' 、 'c' ] == ['b' 、 'a' 、 'c' ]?

Python DictWriter 编写 UTF-8 编码的 CSV 文件

python - 这个 for 循环如何处理以下字符串?

python - 为什么在微调时需要卡住 Batch Normalization 层的所有内部状态

c# - 结合其他对象列表构建新的对象列表

R:计算列列表中的对象

python - 将反向特征添加到插入排序的典型方法是什么?

python - Python 中的重叠积分 - 将结果存储在数组中

java - HashSet 在此实例中是否为性能提供任何附加值?