Python一次更新一个列表元素,直到达到总和(list)
我有一个以全零开头的列表。我想连续向列表中的每个元素添加一个整数,直到整个列表的总和达到某一点 假设我希望列表的总和等于24。当我尝试时,它几乎让我觉得它是有效的:Python一次更新一个列表元素,直到达到总和(list),python,Python,我有一个以全零开头的列表。我想连续向列表中的每个元素添加一个整数,直到整个列表的总和达到某一点 假设我希望列表的总和等于24。当我尝试时,它几乎让我觉得它是有效的: myList = [0,0,0,0,0,0] while sum(myList) < 24: myList = [x+1 for x in myList] 感谢您的指导。您需要保留一个索引,在到达终点时循环到前面: i = 0 while sum(myList) != 22: myList[i] += 1
myList = [0,0,0,0,0,0]
while sum(myList) < 24:
myList = [x+1 for x in myList]
感谢您的指导。您需要保留一个索引,在到达终点时循环到前面:
i = 0
while sum(myList) != 22:
myList[i] += 1
i = (i + 1) % len(myList)
(i+1)%len(myList)
表达式将索引循环回0
,否则将增加i
,使其超出范围
演示:
但是,要知道,在不每次递增一个值的情况下,存在以下情况:
您甚至不需要循环,您可以直接构建列表:
target = 22
length = 6
quotient, remainder = divmod(target, length)
out = [quotient+1] * remainder + [quotient] * (length-remainder)
print(out, sum(out))
# [4, 4, 4, 4, 3, 3] 22
i = 0
while sum(myList) != 22:
myList[i] += 1
i = (i + 1) % len(myList)
>>> myList = [0, 0, 0, 0, 0, 0]
>>> i = 0
>>> while sum(myList) != 22:
... myList[i] += 1
... i = (i + 1) % len(myList)
...
>>> myList
[4, 4, 4, 4, 3, 3]
def distribute(oranges, plates):
base, extra = divmod(oranges, plates)
return [base + (i < extra) for i in range(plates)]
>>> distribute(22, 6)
[4, 4, 4, 4, 3, 3]
target = 22
length = 6
quotient, remainder = divmod(target, length)
out = [quotient+1] * remainder + [quotient] * (length-remainder)
print(out, sum(out))
# [4, 4, 4, 4, 3, 3] 22