我有一个列表 B=[0,0,0,0,0,0,0,0,0] 但它可以是任何长度。
我正在尝试遍历所有可以通过迭代放置在 B 中的可能值。当满足某些条件 C 时,我想“重置”我刚刚迭代的元素并将下一个项目提高 1。有点像二进制:
000 变为 001,但是当我们增加到 002 时,条件 C 满足,因此我们将其降至 0 并增加下一列:002 变为 010,依此类推。
对不起,如果我解释得不好。
所以 B 可能从
B=[0,0,0,0,1,2,5]
to
B=[0,0,0,0,1,2,6]
to
B=[0,0,0,0,1,2,7]
等等。
但是当满足条件C时,我想以这种方式重置:
B=[0,0,0,0,1,2,96]
...attempt to increment
B=[0,0,0,0,1,2,97]
...attempt to increment
Condition C met
B=[0,0,0,0,1,3,0]
并且能够做到这一点,直到我最终在最左边的元素上达到条件 C(相当于达到 1111111 并且无法再增加它)。
为了更容易编码,假设条件 C = 所有数字的总和超过 100。
我的尝试(根据 agf 的要求):
B=[0,0,0,0,0,0,0,0]
lenB=len(B)
while sum(B)<=100: #I think I have to somehow account for having tried incrementing the far left instead
B[lenB-1]+=1 #increment last value in B
while sum(B)>100: #if the sum is greater than 100
B[lenB-1]=0 #reset the far right element
B[lenB-2]+=1 #increment the next element
#but this is wrong because it needs to perform this check again and again
#for every column, while also checking if B[len-1] or B[len-2] even exists
编辑:实际上我的条件 C比简单地检查Sum (B)>100 复杂得多。我只是将其用作虚拟条件,因为我可以简单地将“if sum(B)>100”替换为更复杂的条件函数。