python列表控制增量
我正在尝试像算盘一样增加python数字列表python列表控制增量,python,list,increment,Python,List,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]——我试图解决的问题是,当units值类似于units=2时,列表将增加到[2,2,1,1](这同
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]——我试图解决的问题是,当units值类似于units=2
时,列表将增加到[2,2,1,1](这同样很好),问题是当我从一个不均匀的列表运行m()
函数时,列表将从列表[0]增加到[3,3,1,1],而不是[2,2,2,2]
是否有一种类似Python的方法可以让函数从最小值开始递增列表以实现均匀排列?为了以最小值开始第一个元素,您可以将起始索引设置为@jornsharpe建议的
starting\u index=abacus.index(min(abacus))
但是,您需要避免超出列表的末尾,例如,如果units=4
和starting_index=3
,那么您应该在除以len(abacus)
后取计算索引的剩余部分,即计算索引%len(abacus)
最后,我认为在范围(单位)
上循环会更容易。这样你就不需要自己减少单位,并且可以一次增加比算盘长度更多的单位
下面是一个示例实现:
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]
你是说你想从
list.index(min(list))
(仅供参考,list
不是一个好名字,因为它隐藏了内置的内容)?是的,乔恩-没错,我想从min索引开始-我只使用了“list”命名使问题更容易阅读---谢谢--有没有一个好的方法从列表中最低的索引开始?是的,有-拿着我提供的片段,找出插入的位置。啊,完美的乔恩——问题回答得很完美——知道该把它放在哪里——谢谢。我是新来的——我该如何将这个标记为已回答?这个解决方案太漂亮了,差点让我哭了。谢谢回答问题!——我的解决方案是用一堆可怕的if-else语句来决定索引何时开始——您的解决方案更为冗长和“pythonic”,再次感谢。这行代码很棒:index=(raw\u index+start\u index)%len(abacus)
——非常优雅的语句。精彩的。