Python中平衡整数数组的有效方法

Python中平衡整数数组的有效方法,python,arrays,python-3.x,random,transformation,Python,Arrays,Python 3.x,Random,Transformation,下面的代码 import numpy as np W = 5 # any odd positive integer L = 7 # any positive integer M = (W-1)//2 arr = np.random.choice(range(W),L) - M 生成长度为L的数组,其数字范围为-M到M。现在我想修改这个数组,使其和为0(同时保持元素在-M到M范围内的限制) 我希望通过将+1的增量(如果初始和为负数)或-1的增量(如果初

下面的代码

import numpy as np
W   = 5         # any odd positive integer
L   = 7         # any positive integer
M   = (W-1)//2
arr = np.random.choice(range(W),L) - M
生成长度为
L
的数组,其数字范围为
-M
M
。现在我想修改这个数组,使其和为0(同时保持元素在
-M
M
范围内的限制)

我希望通过将+1的增量(如果初始和为负数)或-1的增量(如果初始和为正数)添加到此数组的元素来实现这一点,从列表的第一个元素开始(然后是第二个、第三个元素,等等)。例如,如果初始和是-2(即负),数组是
[2,0,-1,…]
,那么我不能将第一个元素的值增加+1(它已经达到最大值
W=2
),因此我需要将第二个元素增加两次,从而产生
[2,2,-1,…]

三个样本:

[-1,  0,  0, -1,  2,  0, 2] ---> [-2, -1,  0, -1,  2,  0, 2]
or
[-2, -2,  1, -2,  0, -1, 2] ---> [ 2, -2,  1, -2,  0, -1, 2]
or 
[ 2,  2,  2,  2,  2,  2, 2] ---> [-2, -2, -2,  0,  2,  2, 2]

编写一些for/while循环很容易,但是有没有更有效的方法(可能是numpy函数)?

我假设结果列表也应该只包含从
-W
W
的数字?有多种方法可以求和到零。您的最后一个示例也可以是
[0,0,0,0,0,0]
您必须更好地解释平衡的“规则”。添加了更多详细信息。在您的示例中,始终存在#of+-1是偶数,对于+-2也是一样。[-1、-1、+2、+1、+1、+1、-2、0]是有效的输出吗?这是一个丑陋的、不直观的小问题。我在这里看不到优雅的解决方案,任何聪明的解决方案在将来都很难调试。使用循环求解有什么问题?