python – Algo用于将数字划分为(几乎)相等的整数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Algo用于将数字划分为(几乎)相等的整数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1650字,纯文字阅读大概需要3分钟。
内容图文
![python – Algo用于将数字划分为(几乎)相等的整数](/upload/InfoBanner/zyjiaocheng/724/02bbb8e23a4d4c8995d2fca7495b2809.jpg)
我有一种情况,我有发票电子表格来自单行,跨越多个月,数量列包含跨越所有月份的数量总和.
为了运行逐月分析,我们需要将总数量分成n行中的相等(ish)数量,其中n是跨越的月数.
这些数字可以减去一个或两个,但每个元素之间的差异越小越好.
我有一个粗略的模型我在python中做过,但我觉得有更好的方法来做到这一点.注意:请原谅……一切:
from __future__ import division
import math
def evenDivide(num, div):
splits = []
sNum = str(num/div)
remainder = float(sNum[sNum.index('.'):])
#print "Remainder is " + str(remainder)
integer = math.floor(num/div)
#print "Integer is " + str(integer)
totRemainder = round(remainder * div, 2)
#print "Total Remainder is " + str(totRemainder)
for index in range(div):
if (totRemainder > 0):
totRemainder -= 1 if (index%2 == 0) else 0
if (index % 2 == 0):
splits.append(int(integer + 1))
else:
splits.append(int(integer))
else:
splits.append(int(integer))
for index in range(div):
if(totRemainder > 0):
if (index % 2 == 1):
splits[index] += 1
totRemainder -= 1
return splits
def EvalSolution(splits):
total = 0
for index in range(len(splits)):
total += splits[index]
return total
def testEvenDivide():
for index in range(20000):
for jndex in range(3, 200):
if (EvalSolution(evenDivide(index, jndex)) != index):
print "Error for " + str(index) + ", " + str(jndex)
解决方法:
我假设num和div都是整数(你应该在你的问题中提到它).
您可以使用模运算符来查找除法的其余部分:
remainder=num%div # i.e. 124/12 will give you 4
整数除法将为您提供结果的整数部分,而不使用math.floor
integer = num/div # i.e. 124/12 will give you 10
我现在将返回(整数,余数)元组,但如果你真的需要列表中的所有拆分,你可以这样做:
splits=[]
for i in range(div):
splits.append(integer)
for i in range(remainder):
splits[i]+=1
内容总结
以上是互联网集市为您收集整理的python – Algo用于将数字划分为(几乎)相等的整数全部内容,希望文章能够帮你解决python – Algo用于将数字划分为(几乎)相等的整数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。