我在 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/