【发布时间】:2014-09-30 00:06:41
【问题描述】:
我在使用 python 算法时遇到问题。 我有一个包含 4 个值 [a,b,c,d] 的数组,它们是百分比,因此在任何给定时间 a+b+c+d=1。我需要一个循环来遍历这些数字的所有可能组合,步长为 0.1。示例:
[0,0,0,1]
[0,0,0.1,0.9]
[0,0.1,0.1,0.8]
[0.1,0.1,0.1,0.7]
.....
[0.1,0.1,0.2,0.6]
[0.1,0.1,0.3,0.5]
....
[1,0,0,0]
我创建了一个似乎溢出的代码......有什么帮助吗?我知道这是一个菜鸟问题...
def frange(start, stop, step):
while start <= stop:
yield start
start += step
def distribuir(p,array):
if len(array) == 3:
array.append(p)
print(Array)
return
for i in frange(0,1,0.1):
temp = []
temp.append(array)
temp.append(i)
distribuir(p-i,temp)
【问题讨论】:
-
那么,您尝试过什么?如果您不知道如何以
0.1的步长从0.0循环到1.0,请考虑如果您执行range(10)并将每个值乘以0.1会发生什么。一旦你有了这个,你应该知道如何写下一个循环(提示:如果第一个值是0.4,那么下一个值只需从0.0循环到0.6),然后下一个,和下一个。如果你卡在某个地方,你可以发布你的代码以及你卡在哪里。 -
@abarnert:它是 Python 中的分区实现。唯一的区别是缩放 0.1。
-
@GregHewgill:但这个问题是针对长度为 4 的所有分区,而不仅仅是长度为 4,并且没有
0s,并将1, 1, 1, 7和7, 1, 1, 1视为同一个分区,所有这些都与此处所需的输出不同。 -
您知道,有时如果您获得了 90% 的解决方案,那么您自己做额外的 10% 可能是值得的。无论如何,我会打开这个,你可以解决它。
-
@GregHewgill:当然,但我认为 OP 不太可能弄清楚如何将该算法转换为处理排列的算法(除非可能通过获取每个值的所有排列然后过滤它们,这不是一个很好的解决方案)。