【发布时间】:2011-03-14 18:43:31
【问题描述】:
我在 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,没有捕捉到不同的动作等)我只是想帮助解释我想要做什么。
在我的实际实现中,值 total,a,b,c 将被初始化为 0,而另一种方法会更新它们,因为它们只是计数。我只是在这里将它们设置为一些随机值,以便代码返回百分比。
如果有人能给我任何关于如何以更好的方式做这件事的建议,我将不胜感激。
【问题讨论】: