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 = 4
和 starting_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]
我正在尝试像算盘一样递增 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 = 4
和 starting_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]