python 列出受控增量

python list controlled increment

我正在尝试像算盘一样递增 python 数字列表。

list = [0,0,0,0]
units = 4

def m(list, units):
  for e in range(len(list)):
    if units:
      list[e] = list[e] + 1
      units -= 1

这段代码工作正常,因为如果我 运行 m(list, units) 列表将是 [1,1,1,1] - 我试图解决的问题是当单位值类似于 units = 2 列表将递增到 [2,2,1,1](这又很好)问题是当我 运行 来自不均匀列表的 m() 函数时,列表将从列表 [0] 递增到 [3,3,1,1] 而不是 [2,2,2,2]。

有没有一种 pythonic 方法可以让函数从最低值开始递增列表以实现均匀分布?

为了从第一个具有最小值的元素开始,您可以按照@jonrsharpe 的建议将起始索引设置为starting_index = abacus.index(min(abacus))

但是,您需要避免超出列表的末尾,例如 units = 4starting_index = 3,因此您应该在除以 [=16 后取计算索引的余数=],即 calculated_index % len(abacus)

最后,我认为循环 range(units) 会更容易。这样你就不需要自己减少单位,并且可以一次处理比算盘长度更多的单位。

这是一个示例实现:

def m(abacus, units):
    starting_index = abacus.index(min(abacus))
    for raw_index in range(units):
        index = (raw_index + starting_index) % len(abacus)
        abacus[index] = abacus[index] + 1

并测试:

abacus = [0,0,0,0]    
print abacus
m(abacus, 2)
print abacus
m(abacus, 4)
print abacus
m(abacus, 3)
print abacus
m(abacus, 3)
print abacus
m(abacus, 7)
print abacus

结果:

[0, 0, 0, 0]
[1, 1, 0, 0]
[2, 2, 1, 1]
[3, 2, 2, 2]
[3, 3, 3, 3]
[5, 5, 5, 4]