Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python一次更新一个列表元素,直到达到总和(list)_Python - Fatal编程技术网

Python一次更新一个列表元素,直到达到总和(list)

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

我有一个以全零开头的列表。我想连续向列表中的每个元素添加一个整数,直到整个列表的总和达到某一点

假设我希望列表的总和等于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
    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