[英]Python divide list into percentages
I have a function that applies random colors to each set of elements defined by a percentage.我有一个函数,可以将随机颜色应用于按百分比定义的每组元素。 In this case I have a list of 154 elements to start with, but somehow in the end I get only 152 processed elements.在这种情况下,我有一个包含 154 个元素的列表,但不知何故最终我只得到了 152 个已处理的元素。 Not sure why, because I am giving it 100% in total when I call the function at the end.不知道为什么,因为我在最后调用函数时总共给了它 100%。
import maya.cmds as cmds
import random
def selector(percents):
RandomSelection = []
mySel = cmds.ls(sl=1) # a list of elements with a total of 154
random.shuffle(mySel)
start = 0
for cur in percents:
end = start + cur * len(mySel) // 100
RandomSelection.append(mySel[start:end])
start = end
print(len(mySel)) # 154
print ( sum( [ len(listElem) for listElem in RandomSelection]) ) # 152 # why not 154?
for mesh in RandomSelection:
r = [random.random() for i in range(3)]
cmds.polyColorPerVertex(mesh,rgb=(r[0], r[1], r[2]), cdo=1 )
selector([70, 10, 15, 5])
#154
#152
Thank you.谢谢你。
end = start + cur * len(mySel) // 100
can drop up to 1 element at each iteration due to flooring. end = start + cur * len(mySel) // 100
在每次迭代中最多可以删除 1 个元素。
Try this instead :试试这个:
start = 0
cumul = 0
for cur in percents:
cumul += cur
end = cumul * len(mySel) // 100
RandomSelection.append(mySel[start:end])
start = end
This will still drop up to 1 at every iteration due to florring, but these drops won't accumulate (since you recompute your end
from fresh), and at the end you are guaranteed to have an exact division, and so use up all elements.由于花环,这仍然会在每次迭代中最多下降 1,但这些下降不会累积(因为你从新鲜重新计算你的end
),最后你保证有一个精确的划分,所以用完所有元素.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.